2017-08-27 13 views
0

を取らない関数へのパラメータを持つメソッド呼び出し構文の下に必要と変換: - _ディスプレイ=パラメータを取らないメソッド呼び出しから関数の作成はパラメータ

ヴァルdを

どのようにパラメータを使ったメソッド呼び出しでも同じことをします。 以下のサンプルコードをご覧ください。

package paf 

/** 
    * Created by mogli on 8/27/17. 
    */ 
object PafSample { 

    def display(): Unit ={ 
    println("display is a no argument method") 
    } 

    def evenOdd(input : Int) : Unit = if(input % 2 == 0) println(s"$input is even") else println(s"$input is odd") 

    def main(args: Array[String]): Unit = { 

    //This is working 
    val d = display _ 
    executeFunction(d) 

    //TODO : convert to a function call that takes no arguments, 
    //  so that, it can be passed to executeFunction as parameter 

    //val e = evenOdd(3) _ 
    //executeFunction(e) 
    } 

    def executeFunction[B](f :() => B) : B = { 
    println("executing function") 
    f() 
    } 
} 

答えて

0

これはうまくいかないでしょう。 executeFunctionは、パラメータを受け取り、Bを返す関数を取るメソッドです。 evenOddは、タイプIntの1つのパラメータをとり、Unitという意味、Int => Unitを意味します。あなたは、パラメータを受け入れる必要があります

def executeSingleArgFunction[A, B](a: A)(f: A => B): B = { 
    f(a) 
} 

そして:

executeSingleArgFunction(3)(evenOdd) 
+0

ヴァル・D =ディスプレイ_; executeSingleArgFunction(())(d)がCTEを与えています。 – mogli

+0

CTEとは何ですか? – pedrofurla

関連する問題