scala:将元组作为函数的参数是不可能的

lol*_*ley 6 scala tuples

我不能将元组作为方法参数传递:

scala> val c:Stream[(Int,Int,Int)]= Stream.iterate((1, 0, 1))((a:Int,b:Int,c:Int) => (b,c,a+b))
<console>:11: error: type mismatch;
 found   : (Int, Int, Int) => (Int, Int, Int)
 required: ((Int, Int, Int)) => (Int, Int, Int)
Run Code Online (Sandbox Code Playgroud)

谢谢.

DNA*_*DNA 9

就像函数文字一样:

(x:Int) => x + 1
Run Code Online (Sandbox Code Playgroud)

是一个参数的函数,如下

(x:Int, y: Int, z: Int) => x + y + z
Run Code Online (Sandbox Code Playgroud)

是三个参数的函数,而不是3元组的一个参数

你可以使用一个case声明巧妙地完成这项工作:

scala> val c: Stream[(Int,Int,Int)] = 
       Stream.iterate((1, 0, 1)){ case (a, b, c) => (b, c, a+b) }

c: Stream[(Int, Int, Int)] = Stream((1,0,1), ?)
Run Code Online (Sandbox Code Playgroud)

另一种方法是传递元组,但由于所有的_1访问器,这真的很难看:

scala> val c:Stream[(Int,Int,Int)] = 
         Stream.iterate((1, 0, 1))( t => (t._2, t._3, t._1 + t._2) )

c: Stream[(Int, Int, Int)] = Stream((1,0,1), ?)
Run Code Online (Sandbox Code Playgroud)