関数を呼び出す方法を理解するために時々苦労します。誰かが私を助けてくれますか?スカラAPIの関数のシグネチャを理解できません
私はリストを研究しており、そのメソッドのサンプル例を書いています。私はandThen
に関数リテラルを渡す必要があることを理解
def andThen[C](k: (A) ⇒ C): PartialFunction[Int, C]
を次のように
andThen
scala> val l = List (1,2,3,4)
l: List[Int] = List(1, 2, 3, 4)
//x:Int works
scala> val listAndThenExample = l.andThen((x:Int) => (x*2))
listAndThenExample: PartialFunction[Int,Int] = <function1>
//underscore works
scala> val listAndThenExample = l.andThen(_*2)
listAndThenExample: PartialFunction[Int,Int] = <function1>
リストが整数であるため、AはIntでなければなりません。 Cは関数リテラルの出力に依存して何でもかまいません。
上記は意味があります。
その後、私はapplyOrElse
を試しました。以上のことから
def applyOrElse[A1 <: Int, B1 >: A](x: A1, default: (A1) ⇒ B1): B1
を次のようにその署名があり、私はA1がintまたはそのサブクラス(は、UpperBound)することができ、いくつかのB1は、(私はデフォルトの機能で何をすべきかに依存する)戻り値の型になることを理解しています。
私のA1とB1の理解が正しい場合、xはIntまたはそのサブクラスになり、デフォルトの関数リテラルはInt(またはサブクラス)をとり、B1を返します。次のように関数を呼び出そうとしましたが、y:Int
を使用すると機能しませんが、を使用すると機能します。私はなぜ
scala> val l = List (1,2,3,4)
l: List[Int] = List(1, 2, 3, 4)
//this doesnt work
cala> val listApplyOrElse = l.applyOrElse(y:Int,(x:Int)=>println("Wrong arg "+x))
<console>:12: error: not found: value y
val listApplyOrElse = l.applyOrElse(y:Int,(x:Int)=>println("Wrong arg "+x))
^
//but underscor works
scala> val listApplyOrElse = l.applyOrElse(_:Int,(x:Int)=>println("Wrong arg "+x))
listApplyOrElse: Int => AnyVal = <function1>
質問を理解していない - なぜ両方のx:INTと_:intはandThenのためではなく、applyOrElseのために働いていましたか? 質問 - 「A」とは何ですか、B1はAに関連するのですか?
'l.applyOrElse(_:Int、(x:Int)=> println(" Wrong arg "+ x))'(y:Int)=> l.applyOrElse(y、 :Int)=> println( "間違ったarg" + x)) ' –