我们来看一下
e2im2 到底要干什么:typealias Cnt = Int
interface ArrayFlags<T> {
fun checkFlags(vararg item: T): BooleanArray
@Throws(FlagFail::class)
fun setFlags(vararg item: T)
@Throws(FlagFail::class)
fun unsetFlags(vararg item: T)
data class FlagFail(val position: Cnt, val newState: Boolean): Error("Failed to → $newState at item #$position")
}
typealias Path = String
interface FilePinner: ListFlags<Path>
『工程』还真是,我也不知道后面那些代码质量怎么样。
举个例子吧,Gradle wrapper 弄什么 distributationUrl, base, path, zipStore 还能让项目维护者去调 zipStore/dist 的 base/path,而且总是很多显式写出默认的 GRADLE_USER_HOME, wrapper/dists……
Gradle 下载 wrapper 后那个打印时间的程序
我思量着,你的精力都花在那种成天上 sof 找到一个版本不兼容怎么改的问题,怎么能有余力去好好设计程序?
还有那些个弄IDE包装的,为什么要刻意给模板多写那么多代码,真是难看得要死
举个例子吧,Gradle wrapper 弄什么 distributationUrl, base, path, zipStore 还能让项目维护者去调 zipStore/dist 的 base/path,而且总是很多显式写出默认的 GRADLE_USER_HOME, wrapper/dists……
Gradle 下载 wrapper 后那个打印时间的程序
typealias Num = Int当然再写简单一点也可以,就是从大到小除、除不尽余下的继续输出而已,必须从大到小的顺序也容易理解。
data class NumUnit(val base: Num, val unitName: String) {
override fun toString() = "$base $unitName"
}
/** [units] __descending__ sequence of number unit */
fun formatUnits(units: Iterable<NumUnit>): (Num) -> List<NumUnit> = fmt@{ num ->
val represented = mutableListOf<NumUnit>()
var restNum = num
for ((ratio, unit) in units) {
represented.add(NumUnit(restNum / ratio, unit))
restNum = restNum % ratio
}
return@fmt represented
}
infix fun Num.unit(unit: String) = NumUnit(base = this, unitName = unit)
object Time {
@JvmStatic
fun main(vararg arg: String) {
val units = listOf(60*1000 unit "min", 1000 unit "sec", 1 unit "ms")
val format = formatUnits(units)
format(31243252).filter { it.base != 0 }.joinToString().let(::println)
}
}
[DuangSUSE@duangsuse]/tmp% kotlin Time
520 min, 43 sec, 252 ms
我思量着,你的精力都花在那种成天上 sof 找到一个版本不兼容怎么改的问题,怎么能有余力去好好设计程序?
还有那些个弄IDE包装的,为什么要刻意给模板多写那么多代码,真是难看得要死
Kotlin gradle plugin 想调个 jvmTarget 找不到属性,而且版本问题错误了还得上 sof 找,气死我了,浪费时间。
我应该先写C++部分的,C++部分都比那个好弄
我应该先写C++部分的,C++部分都比那个好弄
某些工程师也真是在把自己精力浪费在无聊事情上弄习惯了,设计设计出一大堆奇妙的问题,不少写应用的也是能用走人,他们难道不知道 jvm target 是 Gradle 在管要到 build script 里调?
Interactive protocol (Tunnel)
{a} means (repeat a); (a b c) means (sequence of a b c); (a|b|c) means (a or b or c); a!t means (ensure t unread before read a)
'+', '-' for each file input, '.' normal; '!' (error code) fail
'?' for each file input, 't' immutable flag set; 'f' immutable flag unset; '!' (error code) fail
{a} means (repeat a); (a b c) means (sequence of a b c); (a|b|c) means (a or b or c); a!t means (ensure t unread before read a)
newline '\n'Feedback protocol
Ws {' '|newline}
Tunnel {Operation newline}
Operation Action Count Ws Files
Action '+'|'-'|'?'
Count {digit}
digit [0-9]
Files {Path ws!newline}
Path (Escape|anyChar) until ws
Escape '\\' anyChar
'+', '-' for each file input, '.' normal; '!' (error code) fail
'?' for each file input, 't' immutable flag set; 'f' immutable flag unset; '!' (error code) fail
本来字符级别处理的类 Scanner 的算法我之前写过不止一次,只有写 C++ 的时候老出问题,还无尽循环导致分配太多内存,我估计肯定是某处数据流没移动,可是检查过却都是对的
其实 count 根本就是一个冗余设计…… 但是也不是没道理的,毕竟本来就应该有确定大小,我写的时候随便了点动态大小了
duangsuse::Echo
这样能够做到吗?
我在脑子里模拟然后确认了一下,除了 onHandle 外解析部分应该是完好可以使用的。