JavaScript的快樂時光樂趣土地JavaScript的Function.prototype.bind是否有Ruby等價物?
// 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();
輸出。好極了!
1 2 3
在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
所需的輸出
1, 2, 3
對於它的價值,我知道JavaScript可以改變的第一個參數的結合上下文傳遞給.bind
。在Ruby中,即使我無法更改上下文,我也會很開心。我主要需要簡單地將參數綁定到方法。
問題
是否有參數綁定到一個Ruby Method
的實例,例如,當我打電話method.call
沒有額外的參數,被綁定參數是仍然傳遞給方法的方法嗎?
目標
這是一個常見的JavaScript的成語,我認爲這將是任何語言有用。目標是將方法M
傳遞給接收方R
,其中R不需要(或具有)當R執行該方法時要將哪些(或多少)參數發送給M的固有知識。這如何可能是有用的
/* 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
您的問題請問? :) –
我不是一個參考,但我從來沒有見過Ruby寫的那種方式。我很好奇......這種方法有一個特別的原因嗎?你想達到什麼目的? – Mohamad
@Mohamad這是一個常見的JavaScript習慣用法。我爲這個問題添加了一些信息。 – naomik