Scala 从CaseClass(Int,String)元组创建函数[Int,String,CaseClass]?

Scala 从CaseClass(Int,String)元组创建函数[Int,String,CaseClass]?,scala,Scala,鉴于: 我正在尝试使用Foo.tuple创建函数2[Int,String,Foo]: 但是,它不起作用。如何修复此损坏的代码?我不确定匹配应该做什么。你不需要它。要创建Function1[Int,String,Foo],请使用.tuple,如下所示: scala> val fn2: Function2[Int, String, Foo] = Foo.tupled match { | case (param1, param2) => { (param1, param2

鉴于:

我正在尝试使用Foo.tuple创建函数2[Int,String,Foo]:


但是,它不起作用。如何修复此损坏的代码?

我不确定匹配应该做什么。你不需要它。要创建Function1[Int,String,Foo],请使用.tuple,如下所示:

scala> val fn2: Function2[Int, String, Foo] = Foo.tupled match { 
     |   case (param1, param2)  => { (param1, param2) => Foo(param1, param2) } 
     | }
<console>:18: error: constructor cannot be instantiated to expected type;
 found   : (T1, T2)
 required: ((Int, String)) => Foo
         case (param1, param2)  => { (param1, param2) => Foo(param1, param2) }
scala> val fn2: Function2[Int, String, Foo] = Foo.tupled match { 
     |   case (param1, param2)  => { (param1, param2) => Foo(param1, param2) } 
     | }
<console>:18: error: constructor cannot be instantiated to expected type;
 found   : (T1, T2)
 required: ((Int, String)) => Foo
         case (param1, param2)  => { (param1, param2) => Foo(param1, param2) }
scala> case class Foo(x: Int, y: String)
defined class Foo

scala> val f = Foo.tupled
f: ((Int, String)) => Foo = <function1>

scala> f((1, "x"))
res0: Foo = Foo(1,x)
scala> val x: Function2[Int, String, Foo] = Foo
x: (Int, String) => Foo = Foo

scala> :javap -c Foo$
Compiled from "<console>"
public class Foo$ extends scala.runtime.AbstractFunction2<java.lang.Object, java.lang.String, Foo> implements scala.Serializable {
  public static final Foo$ MODULE$;