->在scala中是什么意思

时间:2018-07-29 02:52:13

标签: scala functional-programming

当我阅读《 scala中的功能编程》这本书时。 我发现这样的表达式:

case (Cons(h, t), Empty) => 
    Some(f(Some(h()), Option.empty[B]) -> (t(), empty[B]))

有什么区别
Some(f(Some(h()), Option.empty[B]), (t(), empty[B]))

2 个答案:

答案 0 :(得分:1)

如果第二个示例可以编译,则应在编译时显示警告:creating a 2-tuple: this may not be what you want否则将失败,因为Some()不使用两个参数。第一个示例应该编译,因为->显式创建了元组以作为单个参数发送到(外部)Some()

创建两个元素的元组时,可以选择使用括号和逗号(5, true)或箭头5 -> true。在大多数情况下,使用箭头版本时,括号是可选的。

如果您想要两个以上的元素(即嵌套元组),则不能使用箭头:

'c' -> 'b' -> 'x'
//res0: ((Char, Char), Char) = ((c,b),x)

答案 1 :(得分:0)

->实际上是ArrowAssoc类的一种方法,每个对象都可以隐式转换为该方法。参见对象scala.Predef。定义为:

def -> [B](y: B): Tuple2[A, B] = Tuple2(x, y)

这意味着1 -> 2等效于1.->(2),其求值为Tuple2(1, 2)。本书(第3版)第21.4节对此也进行了解释。