Khi &
sử dụng trước đối tượng Proc trong lời gọi phương thức, nó xử lý Proc như thể nó là một khối bình thường sau khi gọi.
Khi sử dụng &
trước loại đối tượng khác (biểu tượng :first_name
trong trường hợp của bạn) trong lời gọi phương thức, nó cố gắng gọi to_proc trên đối tượng này và nếu không có phương pháp to_proc, bạn sẽ nhận được TypeError
.
Thường là &:first_name
giống với &:first_name.to_proc
.
Symbol#to_proc Trả về đối tượng Proc phản hồi phương thức đã cho theo sym.
:first_name.to_proc
sẽ trở lại Proc trông như thế này:
proc { |obj, *args, &block| obj.first_name(*args, &block) }
này Proc gọi phương pháp xác định bởi biểu tượng ban đầu về đối tượng đi làm tham số đầu tiên và vượt qua tất cả các thông số còn lại + khối như phương pháp này lập luận .
Thêm một ví dụ:
> p = :each.to_proc
=> #<Proc:0x00000001bc28b0>
> p.call([1,2,3]) { |item| puts item+1 }
2
3
4
=> [1, 2, 3]
Nguồn
2012-02-08 08:21:09
Đây là một bản sao của không ít hơn 16 câu hỏi khác mà đã được hỏi và trả lời ở đây trên StackOverflow:. [Understanding \ [ClassOne, ClassTwo \] mỗi \ (& : my_method \)] (http://StackOverflow.Com/q/99318/), [Bản đồ (&: name) 'có nghĩa là gì trong Ruby?] (http://StackOverflow.Com/q/1217088/) , [Chính xác là gì 'và: viết hoa' trong Ruby?] (Http://StackOverflow.Com/q/1792683/), [Ruby/Ruby on Rails dấu và phím tắt dấu hai chấm] (http://StackOverflow.Com/q/ 1961030 /), [Ruby: '&: symbol' syntax] (http://StackOverflow.Com/q/2096975/),… –
… [Đây là gì' &: last' Ruby Construct Called?] (Http://StackOverflow.Com/q/2211751/), [Bạn gọi cái gì '&:' operator trong Ruby?] (http://StackOverflow.Com/q/2259775/), [Bản đồ (&: name) 'làm gì trong mã Ruby này?] (http://StackOverflow.Com/q/2388337 /), [là gì ': +' và '& +' trong ruby?] (http://StackOverflow.Com/q/2697024/), ['&: views_count' trong' Post.published. thu thập (&: views_count) '] (http://StackOverflow.Com/q/3888044/), [Cú pháp Proc của Ruby] (http://StackOverflow.Com/q/4512587/), [Làm thế nào để" '(1 ..4) .inject (&: +) '” hoạt động trong Ruby] (http://StackOverflow.Com/q/5003257/),… –
… [Câu lệnh sau '&: property'?] (Http: //StackOverflow.Com/q/5620411/), ['&' có nghĩa là gì trong cú pháp ruby sau đây?] (Http://StackOverflow.Com/q/5952175/), [Tại sao một người dùng toán tử đơn nhất trên một tài sản trong ruby? tức là '&: first'] (http: // StackOverflow.Com/q/6289084 /) và [Array # map' có tham số như thế nào?] (Http://StackOverflow.Com/q/6716629/). –