は今Scalaで、今私はこれをやっている:
def f(ab:(Int, Int)) : Int = {
val (a, b) = ab
a + b
}
val d = (1, 2)
f(d)
は引数が渡されている間に分解が起こるように、私はここで行うことができるものはありますか?ちょっと興味があるんだけど。
ありがとうございました。
は今Scalaで、今私はこれをやっている:
def f(ab:(Int, Int)) : Int = {
val (a, b) = ab
a + b
}
val d = (1, 2)
f(d)
は引数が渡されている間に分解が起こるように、私はここで行うことができるものはありますか?ちょっと興味があるんだけど。
ありがとうございました。
あなたが関数を作成し、パターンマッチングでその入力を一致させることができます。
scala> val f: ((Int, Int)) => Int = { case (a,b) => a+b }
f: ((Int, Int)) => Int
scala> f(1, 2)
res0: Int = 3
それともmatch
キーワードでメソッドの入力に一致する:
scala> def f(ab: (Int, Int)): Int = ab match { case (a,b) => a+b }
f: (ab: (Int, Int))Int
scala> f(1, 2)
res1: Int = 3
もう一つの方法は、関数を使用することです2つの引数を使用してそれを「タプル」する:
scala> val f: (Int, Int) => Int = _+_
f: (Int, Int) => Int = <function2>
scala> val g = f.tupled // or Function.tupled(f)
g: ((Int, Int)) => Int = <function1>
scala> g(1, 2)
res10: Int = 3
// or with a method
scala> def f(a: Int, b: Int): Int = a+b
f: (a: Int, b: Int)Int
scala> val g = (f _).tupled // or Function.tupled(f _)
g: ((Int, Int)) => Int = <function1>
scala> g(1, 2)
res11: Int = 3
// or inlined
scala> val f: ((Int,Int)) => Int = Function.tupled(_+_)
f: ((Int, Int)) => Int = <function1>
scala> f(1, 2)
res12: Int = 3
方法について:
ab._1 + ab._2
_1、_2などのタプルの異なる要素にアクセスします。
これは、Pythonで 'def f(a):a [0] + a [1]'を実行するのと似ています。私は実際には追加の 'val(a、b)= ab'代入をここで避けようとしていません。 – verma
object RandomExperiments extends App{
def takeTuple(t:(Int,Int))=print (s"$t ${t._1}\n")
takeTuple(1,3)
takeTuple((1,3))
takeTuple(((1,3)))
}
プリント:
(1,3) 1
(1,3) 1
(1,3) 1
興味深い。私はこれがPythonでも可能だったことは知らなかった。 – Debilski
また:https://issues.scala-lang.org/browse/SI-813 – Debilski