JavaScript glückliche Zeiten Spaß LandGibt es eine Ruby-Entsprechung für JavaScript Function.prototype.bind?
// make a method
var happy = function(a, b, c) {
console.log(a, b, c);
};
// store method to variable
var b = happy;
// bind a context and some arguments
b.bind(happy, 1, 2, 3);
// call the method without additional arguments
b();
Ausgang. Yay!
1 2 3
In Ruby
# make a method
def sad a, b, c
puts a, b, c
end
# store method to variable
b = method(:sad)
# i need some way to bind args now
# (this line is an example of what i need)
b.bind(1, 2, 3)
# call the method without passing additional args
b.call
Wunsch Ausgang
1, 2, 3
Für das, was es wert ist, ich weiß JavaScript den Kontext der Bindung mit dem ersten Argument ändern übergeben an .bind
. In Ruby wäre ich zu 99% glücklich, auch wenn ich den Kontext nicht ändern könnte. Ich muss in erster Linie einfach Parameter an die Methode binden.
Frage
Gibt es eine Möglichkeit Parameter zu einer Instanz einer Ruby zu binden Method
so dass, wenn ich method.call
ohne zusätzliche Parameter aufrufen, werden die gebundenen Parameter noch an die Methode übergeben?
Tor
Dies ist ein gemeinsames Idiom JavaScript und ich denke, es ist in jeder Sprache nützlich sein würde. Das Ziel besteht darin, eine Methode M
an einen Empfänger R
zu übergeben, wobei R keine intrinsische Kenntnis davon benötigt (oder hat), welche (oder wie viele) Parameter an M gesendet werden müssen, wenn R die Methode ausführt.
Ein JavaScript-Demonstration, wie dies könnte
/* this is our receiver "R" */
var idiot = function(fn) {
console.log("yes, master;", fn());
};
/* here's a couple method "M" examples */
var calculateSomethingDifficult = function(a, b) {
return "the sum is " + (a + b);
};
var applyJam = function() {
return "adding jam to " + this.name;
};
var Item = function Item(name) {
this.name = name;
};
/* here's how we might use it */
idiot(calculateSomethingDifficult.bind(null, 1, 1));
// => yes master; the sum is 2
idiot(applyJam.bind(new Item("toast")));
// => yes master; adding jam to toast
Ihre Frage Frau bitte? :) –
Ich bin kaum eine Referenz, aber ich habe Ruby nie so geschrieben gesehen. Ich bin neugierig ... Gibt es einen besonderen Grund für diesen Ansatz? Was versuchst du zu erreichen? – Mohamad
@Mohamad Dies ist ein gängiges JavaScript-Idiom. Ich habe der Frage einige Informationen hinzugefügt. – naomik