Forwarded from Deleted Account
与人方便自己方便,不至于基本模型看不出来,新人上手都困难重重
本来就是个 100 块的价,非得整成 5w 买不下来
本来是玉米粥,非得挂个“黄金粥”,这种傲慢与偏见,才是最大的强迫症。
本来就是个 100 块的价,非得整成 5w 买不下来
本来是玉米粥,非得挂个“黄金粥”,这种傲慢与偏见,才是最大的强迫症。
Parser.kt:155:9: error: inner class of generic class extending 'Throwable' is prohibited
emm...
emm...
现在 ParserKt 的风格比较类似『在规范化的同时保证可扩展性』
比较混乱,比如 ErrorListener 就不是一个很好的设计,引起了 error 和 ParseError 的 混淆?
比较混乱,比如 ErrorListener 就不是一个很好的设计,引起了 error 和 ParseError 的 混淆?
Parser.kt:159:17: error: subclass of 'Throwable' may not have type parameters#KotlinEmmm 🌚
我真的服了我自己了,我居然把 Tuple 和 Fold 做成了 Kotlin 语言扩展级别的东西了……
emptyTuple<Int>() == emptyTuple<Int>()
tupleOf(1,2) != tupleOf(1)
"abc".asIterable().fold(asString()) == "abc"
"abc".asIterable().fold(asList()) == listOf('a', 'b', 'c')
listOf(1,2,3).fold(JoinFold(0, Int::plus)) == 6#KotlinEmmm operator fun not() = object: SatisfyTest<IN>() {
override val test = !this@SatisfyTest.test
}
原来这样的 object 的 label 是它的 父树 的 name……
override val test = !this@SatisfyTest.test
}
原来这样的 object 的 label 是它的 父树 的 name……
fun <IN> Feed<IN>.takeWhile(predicate: Predicate<IN>): Sequence<IN>
= sequence { while (true) yield(consumeIf(predicate) ?: break) }
fun <IN> Feed<IN>.take(n: Cnt): Sequence<IN>
= takeWhile { true }.take(n) 删了壮士断腕……
inputOf(1,2,3,10,2).asSequence().takeWhile { it < 10 }.asIterable().fold(JoinFold(0, {this*10+it}))#KotlinEmmm Parser.kt:333:76: error: 'toDashString' is a member and an extension at the same time. References to such elements are not allowed
override fun toString() = ranges.joinToString("", transform = CharRange::toDashString).surround("[" to "]")
override fun toString() = ranges.joinToString("", transform = CharRange::toDashString).surround("[" to "]")
var terminator = terminate.read(s)
while (terminator == notParsed) {
reducer.accept(item.read(s) ?: return notParsed)
terminator = terminate.read(s)
}
return Tuple2(reducer.finish(), terminator) Kotlin 牛逼啊,这么含糊的 nullability 都推导得出来?!
Parser.kt
18.4 KB
Parser.kt
20.2 KB
移除错误设计的 Until 之前的最后一个版本,我把 Until 的 terminator 也给存下来了……