代码之家  ›  专栏  ›  技术社区  ›  Maths noob

scala:将函数参数作为元组传递

  •  2
  • Maths noob  · 技术社区  · 6 年前

    假设我有:

    def foo(i: Int, s: String)
    

    并具有:

    val tuple: (Int, String) = (1, "s")
    

    我能通过吗? tuple foo 不添加包装器 ?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Nagarjuna Pamu    6 年前

    是的,有可能。使用 .tupled 可以将lambda转换为接受元组作为参数。

    鳞皮

    scala> def foo(i: Int, s: String): Int = i
    foo: (i: Int, s: String)Int
    
    scala> (foo _).tupled
    res3: ((Int, String)) => Int = scala.Function2$$Lambda$226/234698513@45984654
    
    scala> val tuple: (Int, String) = (1, "s")
    tuple: (Int, String) = (1,s)
    
    scala> (foo _).tupled(tuple)
    res5: Int = 1
    
        2
  •  0
  •   Jus12    6 年前

    foo(tuple._1, tuple._2) 应该工作。

    如果您想要更易于维护的内容,我建议您执行以下操作:

    type MyTuple = (Int, String) 
    
    def foo(t:MyTuple) = ??? // some code 
    
    val tuple = (1, "s")
    
    foo(tuple) // works
    

    也在里面 foo ,打开元组的最佳方法是

    val (int, string) = t