部分適用で、関数の持つ引数を減らす
Haxeでは引数の持つ関数に対していくつかの引数をあらかじめ指定しておき、引数を減らした関数を生成することが可能です。これには、関数が持つbindという関数を使用します。
class Main {
static function main(){
var func1:Int->Void = output.bind( 5 );
var func2:Int->Void = output.bind( _, 8 );
func1( 12 ); // output( 5, 12 );と同じ
func2( 12 ); // output( 12, 8 );と同じ
}
// Int->Int->Void型の関数
static function output( a:Int, b:Int ):Void {
trace( a, b ); // a, bを出力
}
}
上記のコードではIntの引数を2つ持つoutput関数の片方の引数を束縛して、Intの引数を1つだけ持つ関数を生成しています。
これを、 部分適用 とか 引数の束縛 とか言います。このような引数の束縛は、関数をオブジェクトとして受け渡しをする際に便利です。
例えば、以下のような場合です。
import haxe.Timer;
class Main {
static function main(){
//1秒後に、output( 4, 6 )を実行する。
Timer.delay( output.bind( 4, 6 ), 1000 );
}
static function output( a:Int, b:Int ):Void {
trace( a, b );
}
}
Timer.delayの最初の引数はVoid->Void (引数も戻り値も持たない関数)なので、outputの2つの引数を束縛することで、Void->Voidの関数を作り出しています。
Author And Source
この問題について(部分適用で、関数の持つ引数を減らす), 我々は、より多くの情報をここで見つけました https://qiita.com/shohei909/items/f858fa1341ed54396b61著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .