Thời gian vui vẻ của JavaScript đất vui vẻCó tương đương với Ruby cho Function.prototype.bind của JavaScript không?
// 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();
Đầu ra. Yay!
1 2 3
Trong 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
đầu ra mong muốn
1, 2, 3
Đối với những gì nó có giá trị, tôi biết JavaScript có thể thay đổi bối cảnh của các ràng buộc với đối số đầu tiên được chuyển đến .bind
. Trong Ruby, tôi sẽ vui vẻ 99% ngay cả khi tôi không thể thay đổi bối cảnh. Tôi chủ yếu chỉ cần ràng buộc các tham số cho phương thức.
Câu hỏi
Có cách nào để ràng buộc các tham số để một thể hiện của một Ruby Method
như vậy mà khi tôi gọi method.call
không có tham số bổ sung, các thông số ràng buộc vẫn truyền cho phương pháp này?
Goal
Đây là một thành ngữ JavaScript phổ biến và tôi nghĩ rằng nó sẽ có ích trong bất kỳ ngôn ngữ. Mục đích là để vượt qua một phương thức M
đến một máy thu R
trong đó R không cần (hoặc có) tri thức nội tại trong đó (hoặc có bao nhiêu) tham số gửi tới M khi R thực hiện phương thức.
Một JavaScript cuộc biểu tình của cách này có thể có ích
/* 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
Câu hỏi của bạn madam vui lòng? :) –
Tôi hầu như không phải là một tài liệu tham khảo, nhưng tôi chưa bao giờ thấy Ruby được viết theo cách đó. Tôi tò mò ... có lý do cụ thể nào cho cách tiếp cận đó không? Bạn đang cố gắng đạt được điều gì? – Mohamad
@Mohamad đây là thành ngữ JavaScript phổ biến. Tôi đã thêm một số thông tin cho câu hỏi. – naomik