【问题标题】:Scala tuple extraction in function declaration函数声明中的 Scala 元组提取
【发布时间】:2015-05-13 06:29:29
【问题描述】:

例如给定一个Tuple2 的形式

type Duple = (String,Int)

这个函数错误地提取和标记参数中的重复项,

def f( (s,n): Duple ): String = s*n

不管怎样,

def f( d: Duple ): String = {
  val (s,n) = d
  s*n
}

有没有比这种声明性方法更短的形式来提取和标记函数中的元组项?

【问题讨论】:

    标签: scala pattern-matching


    【解决方案1】:

    从一个常规的 2 arg 函数开始:

    scala> val f: (String, Int) => String = (a, b) => a * b
    f: (String, Int) => String = <function2>
    

    将其转换为接受元组的单个 arg 函数:

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

    使用元组 arg 调用它:

    scala> tf("a" -> 2)
    res0: String = aa
    

    或者如果你走相反的方向:

    从一个接受元组的函数开始:

    scala> tf
    res2: ((String, Int)) => String = <function1>
    

    将其转换为需要 2 个参数的函数:

    scala> val uf = Function.untupled(tf)
    uf: (String, Int) => String = <function2>
    

    用 2 个参数调用它:

    scala> uf("b", 3)
    res3: String = bbb
    

    【讨论】:

      【解决方案2】:
      def f(d: Duple): String = d._1 * d._2
      
      def f(d: Duple): String = d match { case (x, y) => x * y }
      

      【讨论】:

        猜你喜欢
        • 2020-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-20
        相关资源
        最近更新 更多