我有这样的功能:
def print(name:String, surname:String) { println(name + " " + surname) }
Run Code Online (Sandbox Code Playgroud)
我也有一个Tuple2:
val johnsmith = ("John", "Smith")
Run Code Online (Sandbox Code Playgroud)
当我用johnsmith调用print时,我收到以下错误:
scala> print(johnsmith)
error: not enough arguments for method print: (name: String,surname: String)Unit.
Unspecified value parameter surname.
print(johnsmith)
^
Run Code Online (Sandbox Code Playgroud)
这有什么办法吗?我可以通过让print接受Tuple2来实现这一点:
def print2(t:Tuple2[String,String]) { println(t._1 + " " + t._2) }
Run Code Online (Sandbox Code Playgroud)
现在我可以用任何一种方式调用它:
scala> print2(johnsmith)
John Smith
scala> print2("john", "smith")
john smith
Run Code Online (Sandbox Code Playgroud)
有什么我想念的吗?
Dan*_*ral 10
除了Dave的回答,这也有效:
(print _).tupled(johnsmith)
Run Code Online (Sandbox Code Playgroud)
通常,Function.tupled最适用于匿名函数和闭包map
以及类似的方法.例如:
List("abc", "def", "ghi").zipWithIndex.map(Function.tupled(_ * _))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,类型for _ * _
已经定义Function.tupled
.尝试使用tupled
它而不是它,因为在tupled
转换它之前定义了该函数.
对于您的特定情况,tupled
工作,因为print
已知类型.
首先将方法转换为函数,然后将两个args的函数转换为一个元组的函数.
Function.tupled(print _)(johnsmith)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
591 次 |
最近记录: |