2014-12-06 18 views
5

Tôi biết rằng các phương pháp trong Ruby không phải là đối tượng mà là procs và lambdas. Có sự khác biệt nào giữa chúng không? Bởi vì cả hai chúng ta có thể đi qua. Điều gì làm cho các đối tượng proc khác với một phương thức?Sự khác nhau giữa phương pháp và đối tượng proc là gì?

Phương pháp:

1.8.7-p334 :017 > def a_method(a,b) 
1.8.7-p334 :018?> puts "a method with args: #{a}, #{b}" 
1.8.7-p334 :019?> end 
1.8.7-p334 :021 > meth_ref = Object.method("a_method") 
=> #<Method: Class(Object)#a_method> 
1.8.7-p334 :022 > meth_ref.call(2,3) 

Proc Object:

a = lambda {|a, b| puts "#{a}, #{b}"} 
    a.call(2,3) 
+0

Không yêu cầu proc và lambda. Tôi hỏi sự khác biệt giữa một phương thức và đối tượng proc. –

+0

mà không hiểu làm cách nào họ có thể đánh dấu là trùng lặp: (Tôi đã bỏ lỡ nhiều câu trả lời. Câu hỏi của tôi có hợp lệ không? –

+0

Không nên là: 'a = Proc.new {| a, b | puts" # {a}, # {b} "}' Tôi nghĩ tiêu đề của các câu hỏi có nghĩa là chúng ta đang nói về "Proc [s]", chứ không phải "lambda" –

Trả lời

5

Bạn nói trong câu hỏi của bạn rằng "phương pháp này không đối tượng" nhưng bạn phải cẩn thận để phân biệt giữa "phương pháp" và "Phương pháp".

Một "phương thức" là tập hợp các biểu thức đã định nghĩa được đặt tên và được đưa vào bảng phương thức của một lớp cụ thể để dễ dàng tra cứu và thực thi sau này.

Đối tượng "Phương pháp" (hoặc tương tự đối tượng "UnboundMethod") là đối tượng Ruby thực được tạo bằng cách gọi method/instance_method/v.v và chuyển tên của "phương thức" làm đối số.

Bạn có thể thấy hữu ích khi đọc tài liệu RDoc cho UnboundMethod, MethodProc. Các trang RDoc liệt kê các phương thức thể hiện khác nhau có sẵn cho từng loại.

Về cơ bản, đối tượng Method được "gắn" đối tượng để self trỏ đến đối tượng đó khi bạn call phương pháp và Proc không có hành vi đó; self phụ thuộc vào ngữ cảnh trong đó Proc được tạo/gọi.

+0

Trong trường hợp nào chúng tôi sử dụng Phương pháp để tạo phương thức? –

2

Sự khác nhau giữa khối và procs

  1. Procs là những đối tượng, khối không
  2. Tại hầu hết một khối có thể appe ar trong một danh sách đối số

Sự khác nhau giữa procs và lambdas

  1. Lambdas kiểm tra số lượng đối số, trong khi procs không
  2. Lambdas và procs coi từ khoá return khác

Nó được giải thích rất tốt ở đây (tôi vừa sao chép từ liên kết dưới đây)

http://awaxman11.github.io/blog/2013/08/05/what-is-the-difference-between-a-block/

+2

Ở đây không yêu cầu một proc, lambda và khối. Tôi muốn biết sự khác biệt giữa một phương pháp và một đối tượng proc –

+0

@Kranthi Tôi xin lỗi, tôi đã hiểu nhầm bạn. Tôi sẽ sửa câu trả lời ngay khi tôi về nhà. – Verhaeren

+1

Đó sẽ là một trợ giúp tuyệt vời cho tôi! cảm ơn rất nhiều!. –

Các vấn đề liên quan