2016-07-08 9 views
2
scala> def lift3[A,B,C,D] (
    | f: Function3[A,B,C,D]): Function3[Option[A], Option[B], Option[C], Option 
[D]] = { 
    | (oa: Option[A], ob:Option[B], oc: Option[C]) => 
    | for(a <- oa; b <- ob; c <- oc) yield f(a,b,c) 
    | } 
lift3: [A, B, C, D](f: (A, B, C) => D)(Option[A], Option[B], Option[C]) => Option[D] 

、次の行:誰かが以下のスカラコードを説明することはできますか?特に

def lift3[A,B,C,D] (
      f: Function3[A,B,C,D]): Function3[Option[A], Option[B], Option[C], Option 
    [D]] 

これはジョシュアD Suereth(2.1、チャプターリスト2)で深さが本スカラから取られます。私は追加のOption[D]がどのような目的のために役立つのか分かりません。関数の本体では、コードは出力タイプDの最初の3つのパラメータにのみマッピングされます。そのとき、Dが入力パラメータリストで宣言されていますか?何か不足していますか?

私の理解は限られていますが、関数宣言は、関数をパラメータ(4つのパラメータを取る)とし、4つのパラメータをとる関数を返す関数として宣言します。また、なぜ返品の種類についての言及はありませんか? ありがとうございます!

答えて

3

私の理解は限られていますが、関数宣言は、関数をパラメーター(4つのパラメーターを取る)とし、4つのパラメーターをとる関数を返します。また、なぜ返品の種類についての言及はありませんか?

Function3[A,B,C,D]Dと戻り型がある(タイプAB及びCの)パラメータを持つ関数である(それはまた(A, B, C) => Dのように書くことができ、これは、同じタイプ正確です)。したがってFunction3[Option[A], Option[B], Option[C], Option[D]]では、Option[D]が戻り値の型であり、パラメータ型ではありません。

+0

ありがとうドキュメントで見つけることができます!最終的なパラメータが戻り値の型であるという慣習に関するいくつかのドキュメントを指摘できますか? – MojoJojo

+1

私の答えには、ドキュメントへのリンクがあります:) –

2

function3は3つのパラメータをとります。 Dは関数の戻り値の型です。コードが行うことは、3つの引数を持つ関数を取り、3つの引数を持つ関数を返します。各引数とその戻り型はOptionに "持ち上げ"られます。

あなたはFunction3here. のためのAPIドキュメントをチェックアウトすることができ、Rジェネリック型の説明は百万Function2

関連する問題