2016-04-13 9 views
1

おそらく、私は1つのデフォルトパラメーターを持つメソッドを持っています。他のメソッドへの引数として渡したいと思います。渡されたメソッドをデフォルトのパラメータで呼び出すにはどうすればよいですか?スカラー高階関数でのデフォルトパラメーターを持つメソッドの呼び出し

def printNum(i: Int = 4): Unit = { 
    println(i) 
} 

def doStuff(printFunc: (Int) => Unit): Unit = { 
    // How to call printFunc with its default parameter 
    printFunc() 
} 

doStuff(printNum) 

答えて

1

私は恐れることはできません。デフォルトのパラメータは、名前付き引数やこのようなものと同様に、メソッドのプロパティです。関数として渡すと、関数はη拡張で変換され、関数にはデフォルトのパラメータはありません。

ただ、これを見て:

def doStuff(printFunc: Int => Unit): Unit = ??? 

それは機能Int => Unit、任意の関数Int => Unitを期待する方法です。ですから、任意の関数を渡すことができれば、コンパイラがデフォルトのパラメータをどのように持っているかを知ることができます。

Functionのラッパーを作成し、デフォルト値を持ち、オーバーロードされたapplyメソッドを考えることができます。しかし、それを透明にするメソッドからデフォルトの引数を引き出すことはまだ簡単ではありません。あなたはイースリー何ができるか

は別の方法

def printDefaultNum(): Unit = { 
    printNum(4) 
} 

を作成し、実際にパラメータなしでそれを呼びたいようdoStuffFunction0を受け入れるようにすることです。

def doStuff(printFunc:() => Unit): Unit = { 
    printFunc() 
} 

doStuff(printDefaultNum) 
関連する問題