2017-07-04 12 views
5

は、どのように私は、オプションのパラメータとしてラムダ式を渡すことができ、私は事の上を通過する必要がKotlin言語kotlinのラムダ式

val max = { a: Int, b: Int -> 
    if (a > b) 
     a 
    else 
     b 
} 

は、オプションのパラメータと同様に

+1

このラムダを何に渡したいですか? – zsmb13

+0

サイドノートには、JDKには 'Math.max(a、b)'でアクセス可能な 'max'関数があります。これは同じことをします。 – Robin

+0

あなたの質問に関しては、私はあなたが尋ねていることを本当に理解していません - '(Int、Int) - > Int'の関数をとる関数呼び出しに対して、' max'を普通の引数として渡すことができます。 – Robin

答えて

0

ある中であなたを使用することができますmaxはデフォルトとして機能します

fun someDefault(f: (a: Int, b: Int) -> Int = max) { 
    f(1, 7) 
    // do something 
} 

かあなたはまた、あなたが通話のためのラムダを指定することができますかあなたはそれに

fun call() { 
    someDefault() 
    someDefault { a, b -> a * b} 

    someOptional() 
    someOptional { a, b -> a * b} 
} 
5
を省略することができ、両方のケースで

fun someOptional(f: ((a: Int, b: Int) -> Int)? = null) { 
    f?.invoke(1, 7) 
} 

オプションであり、パラメータとしてラムダ(デフォルトとオプション)でメソッドを定義することができます

以下は、が関数を受け入れる関数を定義し、何も供給されない場合、渡された関数のデフォルト値を指定します。

fun foobar(fn: (a: Int, b: Int) -> Int = { a: Int, b: Int -> if (a > b) a else b }) { 
    println(fn(42, 99)) 
} 

独自の関数を渡すことができます。

val min = { a: Int, b: Int -> if (a <= b) a else b } 
foobar(min) 

val max = { a: Int, b: Int -> if (a > b) a else b } 
foobar(max) 

あなたは機能を省略すると、デフォルトを使用することができます。

foobar() 

別の方法としては、として標準ライブラリmaxOf関数を参照することができデフォルトでは、自分で書くのではなく、

fun foobar(fn: (a: Int, b: Int) -> Int = ::maxOf) { 
    println(fn(42, 99)) 
}