Có thể bạn đã quen thuộc với cách viết tắt của Ruby sau ( a
là một mảng):
a.map(&:method)
Ví dụ, hãy thử những điều sau trong irb:
>> a=[:a, 'a', 1, 1.0]
=> [:a, "a", 1, 1.0]
>> a.map(&:class)
=> [Symbol, String, Fixnum, Float]
Cú pháp a.map(&:class)
là cách viết tắt của a.map {|x| x.class}
.
Đọc thêm về cú pháp này trong " Bản đồ (&: tên) có nghĩa là gì trong Ruby? ".
Thông qua cú pháp &:class
, bạn đang thực hiện một cuộc gọi phương thức class
cho mỗi phần tử mảng.
Câu hỏi của tôi là: bạn có thể cung cấp đối số cho phương thức gọi không? Và nếu vậy, làm thế nào?
Ví dụ, làm thế nào để bạn chuyển đổi cú pháp sau
a = [1,3,5,7,9]
a.map {|x| x + 2}
với &:
cú pháp?
Tôi không gợi ý rằng &:
cú pháp tốt hơn. Tôi chỉ quan tâm đến cơ chế sử dụng &:
cú pháp với các đối số.
Tôi giả sử bạn biết đó +
là một phương thức trên lớp Integer. Bạn có thể thử các cách sau trong irb:
>> a=1
=> 1
>> a+(1)
=> 2
>> a.send(:+, 1)
=> 2