gpt4 book ai didi

scala - Scala 中的参数省略/推理

转载 作者:行者123 更新时间:2023-12-01 07:21:04 26 4
gpt4 key购买 nike

所以在来自 another question 的评论中,我刚刚看到了这个计算字符串中 L 数量的例子:

"hello".count('l'==)

而且够疯狂……它有效。

从完全扩展的版本开始,我们有:
"hello".count(ch => ch == 'l')

然后可以简化为:
"hello".count(_ == 'l')

但是我们可以这样做:
"hello".count('l'==)

我会喜欢...... ??? ...

大概 Scala 推断我们一定是想在比较的末尾添加一个 _。 IMO,这就是事情开始变得非常奇怪的地方;这对我来说似乎太过分了。谁能解释允许这种语法背后的想法,或者进一步阐明这一点?

如果您认为这很酷,那么我们如何证明不假设人们可能也需要 == 运算符,以便可以省略它?那么我们可以有:
"hello".count('l')

我想我正在回想起在 perl 中有 10^99999 种可能的做事方式的噩梦......

最佳答案

您开始使用的“完全扩展”版本实际上是倒退的,它应该是:

"hello".count(ch => 'l' == ch)

然而, == Scala 语言并不认为它是特殊的,它只是 Any 的另一种方法.所以进一步扩展:
"hello".count(ch => 'l'.==(ch))

但是坚持下去... count 方法来自 TraversableOnce期待一个带有签名的函数 (A) ⇒ Boolean作为论据。签名 Any.==()恰好是 Any ⇒ Boolean ,这样就可以很好地适应,而无需包装在另一个匿名函数中。所以我们可以说:
"hello".count('l'.==)

或者,省略点:
"hello" count('l' ==)

为什么我们不省略 ==也是运营商?好吧,我猜你可以定义 countEqualcount(a => a ==) (或者,更简洁地说, count(_ ==) )如果你真的想......但你也可以定义 countLowerCase管他呢。这里的要点是 ==并不特别。

关于scala - Scala 中的参数省略/推理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7909814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com