Jay*_*lor 3 syntax programming-languages scala
所以在另一个问题的评论中,我刚看到这个例子用于计算字符串中L'的数量:
"hello".count('l'==)
Run Code Online (Sandbox Code Playgroud)
而且很疯狂..这很有效.
从完全扩展的版本开始,我们有:
"hello".count(ch => ch == 'l')
Run Code Online (Sandbox Code Playgroud)
然后可以减少到:
"hello".count(_ == 'l')
Run Code Online (Sandbox Code Playgroud)
但是我们可以这样做:
"hello".count('l'==)
Run Code Online (Sandbox Code Playgroud)
我想要...... ??? ...
据推测,Scala推断我们必须在比较结束时添加一个_.IMO,这是事情变得非常奇怪的地方; 这对我来说似乎太过分了.任何人都可以解释允许这种语法背后的想法,或进一步阐明这一点吗?
如果您认为这很酷,那么我们如何证明不假设人们也可能想要==运算符,那么可以省略?然后我们可以:
"hello".count('l')
Run Code Online (Sandbox Code Playgroud)
我想我正在回忆到在perl中有10 ^ 99999种可能的做事方式的噩梦......
mer*_*ict 12
你开始使用的"完全扩展"版本实际上是向后的,它应该是:
"hello".count(ch => 'l' == ch)
Run Code Online (Sandbox Code Playgroud)
但是,==Scala语言并不特别,它只是另一种方法Any.所以进一步扩展:
"hello".count(ch => 'l'.==(ch))
Run Code Online (Sandbox Code Playgroud)
但是请坚持...... count方法TraversableOnce是期望一个带有签名(A) ? Boolean作为参数的函数.签名Any.==()碰巧是Any ? Boolean,所以适合整齐而不需要包装在另一个匿名函数中.所以我们只能说:
"hello".count('l'.==)
Run Code Online (Sandbox Code Playgroud)
或者,省略点:
"hello" count('l' ==)
Run Code Online (Sandbox Code Playgroud)
为什么我们也不省略==运算符?好吧,我猜你可以定义countEqual为count(a => a ==)(或者更简洁一点count(_ ==)),如果你真的想...但你也可以定义countLowerCase或者其他什么.这里的要点==是并不特别.