このようなJavaScriptのような関数作成の繰り返しを避けることで、このスニペットのより多くの機能を書くにはどうすればよいですか?ちょうど文脈を与えるために、私は現在の値から最終値への動きがすでに達成されているかどうかを見いだそうとしています。deltaValue
は、動きがより高い値に向かっているならば正であり、そこと仮定JSの上位関数を使用した繰り返しの回避
if (deltaValue > 0) {
maxPossibleValue = function(current, final) {
return current > final ? final : current;
}
} else {
maxPossibleValue = function(current, final) {
return current < final ? final : current;
}
}
が機能し、JavaScriptでlt
とgt
として<
と>
を存在していた、私はちょうどpredicate
は高階関数を扱うlt
とgt
ある単一の関数でこれを評価した可能性があります。しかし、JSにはそのような関数はネイティブにないので、上記の方法は唯一の方法ですか?
maxPossibleValue = function(predicate) {
return function(c, f) {
return predicate(c, f) ? c : f }
}
これは、必要な述語関数をテンプレート化し、新しい関数を返すものと考えることができます。私はSchemeでそのようなパターンを見てきました。
よりも従うことが困難であるべきない理由を見ませんか? maxPosibleValue(function(c、f){return c> f;})(c、f); – dlopez
これは目標を達成していますか?私は微妙に論理を使って変数を反転させ、私が望むものを達成することができます。 – Nishant
私が苦労したインライン関数は、あなたが必要と思われるアプローチの1つです(deltaValueが0より大きい場合)。明らかに、あなたは必要な振る舞いを得るために毎回関数のロジックを変更することができます。 – dlopez