Forwarded from duangsuse Throws
#dev #PLT 给大家讲个有趣的事情:
🐔鸡你太美。
我在网易云音乐找这个东西的时候,对两首歌特别可心。
其一是原版《只因你太美》、其二是一个纯音乐 remix。
我们知道,原版(SWIN) 的是有歌词的(只因你太美……)
可是 remix 版只有重复的『鸡你太美……实在是太美』这样类似词穷的东西,我们认为它是纯音乐,没有唱词。
如果你是网易云的工程师,尝试用 #Kotlin 这样的『面向对象』编程语言给这样可能有歌词的歌曲建模,你会怎么建呢?
——
首先,我想到的办法是类似这样,
有点类似 libc 的『特殊返回值』,比如函数
但是这不是很规范,而且容易给数据维护制造问题,所以:
这样我们也可以同时表达有歌词的『只因你太美』和没歌词的『只因你太美(remix)』
可是,如果除了歌词外还有别的东西可能有出入,或者觉得『一首歌可能有歌词也可能完全没有、但居然还要存
🐔鸡你太美。
我在网易云音乐找这个东西的时候,对两首歌特别可心。
其一是原版《只因你太美》、其二是一个纯音乐 remix。
我们知道,原版(SWIN) 的是有歌词的(只因你太美……)
可是 remix 版只有重复的『鸡你太美……实在是太美』这样类似词穷的东西,我们认为它是纯音乐,没有唱词。
如果你是网易云的工程师,尝试用 #Kotlin 这样的『面向对象』编程语言给这样可能有歌词的歌曲建模,你会怎么建呢?
——
首先,我想到的办法是类似这样,
val NO_LYRICS: Lyrics = TODO()
data class Song(/*...*/, val lyrics: Lyrics)
比如,如果我们以链接(URI)的方式“存储”歌词,那么没歌词的情况:const val NO_LYRICS = "nolyrics:" 有点类似 libc 的『特殊返回值』,比如函数
ioctl 如果返回 (-1) 表示请求出错。但是这不是很规范,而且容易给数据维护制造问题,所以:
data class Song(/*...*/, val lyrics: Lyrics?) 这样我们也可以同时表达有歌词的『只因你太美』和没歌词的『只因你太美(remix)』
可是,如果除了歌词外还有别的东西可能有出入,或者觉得『一首歌可能有歌词也可能完全没有、但居然还要存
null』该如何?sealed class Music(/*...*/) {
data class Song(/*...*/, val lyrics: Lyrics): Music(/*...*/)
}
然后,我们在取的时候判断 music is Song,或者 (music as? Song)?.lyrics ?: "无歌词" 就可以了。#dalao https://github.com/spieglt/nestur
这个真心不错啊,APU 和 PPU 是啥…… 我只知 ALU(Arithmatic Logic Unit) 毕竟是游戏机处理平台啊!还能跑超级玛丽!只用底层的 SDL 绘图
这个真心不错啊,APU 和 PPU 是啥…… 我只知 ALU(Arithmatic Logic Unit) 毕竟是游戏机处理平台啊!还能跑超级玛丽!只用底层的 SDL 绘图
GitHub
GitHub - spieglt/nestur: The NES (emulator) you left outside in the rain but let dry and still kind of works
The NES (emulator) you left outside in the rain but let dry and still kind of works - spieglt/nestur
要继续写 Literate Kotlin 的项目生成和关于 Relational Programming 的 LiterateKt 文章,但我觉得不如先…… 休息一下,写点简单的东西 🤔
才体会到工程的难度,原来测试不过不能 push 是真的!我刚才发布了一个 v1.2 一上来就是修完 bug 没修好,不能用的版本!
一个新版本居然不能用??就发布了??工程管理不善??太难了!!!
一个新版本居然不能用??就发布了??工程管理不善??太难了!!!
有点怀念当年用 subslice 写『解析器』、分不清 call-by-value、call-by-name、call-by-need 的时候了,现在设计实现语法、模式什么的根本没有难度……
但是工程总是需要时间,而对这个时间的预估我目前仍是眼高手低
但是工程总是需要时间,而对这个时间的预估我目前仍是眼高手低
Forwarded from duangsuse Throws
LiterateKt 真是很赞,虽然它也还没用上啥非常不得了的技术(用上也不该是以网页脚本的形式)
但是,就目前而言好像也没发现任何问题,偶尔处理不好文章的依赖组织,发生了多层嵌套的情况错误了,其实也是因为自己没组织好文章分区的关系,重新组织发现很够用,自动依赖关系解析也不会对循环依赖多给结果导致 Kotlin redeclaration。
唯一还不够的是文档里没写明两种依赖求解方式对输入结构是否递归的要求,明天考虑修一下……
但是,就目前而言好像也没发现任何问题,偶尔处理不好文章的依赖组织,发生了多层嵌套的情况错误了,其实也是因为自己没组织好文章分区的关系,重新组织发现很够用,自动依赖关系解析也不会对循环依赖多给结果导致 Kotlin redeclaration。
唯一还不够的是文档里没写明两种依赖求解方式对输入结构是否递归的要求,明天考虑修一下……