Open enbandari opened 7 years ago
能够出现类似语法的,我们可以对照一下 Swfit 和 Scala。
先说说 Scala,它的解析器应该是极其强大的,毕竟人家允许各种字符作为运算符啊。。
嗯,毕竟人家的泛型参数机智地选择了 [] 而不是 <> ,OK,你赢了。。
那么我们再来看看 Swift 吧,这个比较有说服力:
let ints: Array<Int>= [1, 2, 4]
ints.forEach{item in print(item)}
瞧见没,人家就能识别出来!当然这里有个奇怪的地方,如果你用 JetBrains 家的 AppCode 运行这段代码,结果就会报错,额,这也许是一个悲伤的故事。。
也许看了我们的题目,大家还没有明白过来到底发生了什么,那么我请大家再仔细看看:
val list: ArrayList<String>= ArrayList()
^
什么地方报错呢?就是泛型参数后面的 >
处。
这就让人不理解了,看上去并没有什么问题啊。我们再来看看错误提示:
嗯?说 >
那个地方缺个 >
? 什么鬼。。好吧,我大概猜到原因了,泛型参数后半个 >
估计与后面赋值用的 =
连起来被识别成了 >=
,于是乎。。。
@bennyhuo
实际上通过前面的讨论,我们就知道为什么 Kotlin 的移位居然不用
>>
和<<
,而是shr
和shr
这样的中缀表达式,毕竟人家没办法识别呀。。好啦,其实这都不是什么大问题了,这篇文章探讨的那句代码本身就比较蛋疼:
我就问你为什么不去掉前面的类型,类型推导难道还不够吗?
或者在
>=
中间打一个空格嘛,这样就啥事儿没有了。而说到移位用中缀表达式的问题,我们群里有位大佬就终于忍不住为 Kotlin 发声了:
欢迎关注微信公众号 Kotlin