2013-08-01 40 views
5

biến Non-block là bắt buộc:Tại sao các biến khối tùy chọn?

def foo arg; end 
foo # => ArgumentError 

Để cho phép đối số tùy chọn, giá trị mặc định phải được cung cấp:

def foo arg = nil; end 
foo # => nil 
biến

Nhưng khối là không bắt buộc:

def foo █ end 
foo # => nil 

Nếu không có giá trị mặc định, biến khối vắng mặt được gán nil và trên thực tế, các biến khối không thể nhận giá trị mặc định:

def foo &block = ->{puts :foo}; end 
# => syntax error 

Ngược lại, một phương pháp có thể mất một khối bổ sung mà không được yêu cầu trong định nghĩa:

def foo; end 
foo{puts :foo} # => nil 

là gì lợi thế của các biến khối được thiết kế như thế này như trái ngược với phi-block biến?

Trả lời

4

Sẽ không có nhiều điểm ném lỗi khi không có khối nào được đưa ra, vì bất kỳ phương pháp nào sử dụng yield hoặc block.call sẽ vẫn bị lỗi nếu không có khối. Cũng sẽ không có nhiều điểm cung cấp một khối mặc định, vì mã mặc định sẽ được thực hiện chỉ có thể được viết vào chính phương thức đó (nó sẽ có nhiều chỗ hơn viết nội tuyến với các đối số).

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