Có phải def greet; puts "hello"; end
cách duy nhất để định nghĩa một phương thức trên một dòng trong Ruby không?
Có phải def greet; puts "hello"; end
cách duy nhất để định nghĩa một phương thức trên một dòng trong Ruby không?
Câu trả lời:
Bạn có thể tránh phải sử dụng dấu chấm phẩy nếu sử dụng dấu ngoặc đơn:
def hello() :hello end
Chỉ cần đưa ra câu trả lời mới đầy đủ:
Nói chung tránh các phương pháp dòng đơn. Mặc dù chúng hơi phổ biến trong tự nhiên, nhưng có một vài điểm đặc biệt về cú pháp định nghĩa của chúng khiến việc sử dụng chúng không được mong muốn. Ở bất kỳ tỷ lệ nào - không được có nhiều hơn một biểu thức trong một phương thức một dòng .
# bad
def too_much; something; something_else; end
# okish - notice that the first ; is required
def no_braces_method; body end
# okish - notice that the second ; is optional
def no_braces_method; body; end
# okish - valid syntax, but no ; make it kind of hard to read
def some_method() body end
# good
def some_method
body
end
Một ngoại lệ đối với quy tắc là các phương thức rỗng.
# good
def no_op; end
def add a,b; a+b end
Dấu chấm phẩy là dấu chấm dứt câu lệnh nội tuyến cho Ruby
Hoặc bạn có thể sử dụng define_method
phương pháp. (Chỉnh sửa: Cái này không được dùng nữa trong ruby 1.9)
define_method(:add) {|a,b| a+b }
Cách khác:
define_method(:greet) { puts 'hello' }
Có thể được sử dụng nếu bạn không muốn nhập phạm vi mới cho phương thức trong khi xác định nó.
define_method
đã được "tư nhân hóa" trong Ruby 1.9
Tuy nhiên, một cách khác:
def greet() return 'Hello' end
return
ở đây vì nó không phải là điều khoản bảo vệ.