2008-11-01 6 views
21

Vì vậy, tôi đã có một phương pháp của Ruby như thế này:Cú pháp để đưa một khối trên một dòng đơn

def something(variable, &block) 
    .... 
end 

Và tôi muốn gọi nó là như thế này:

something 'hello' { do_it } 

Trừ rằng isn' t làm việc cho tôi, tôi nhận được một lỗi cú pháp. Thay vào đó, nếu tôi làm điều này, nó hoạt động:

something 'hello' do 
    do_it 
end 

Ngoại trừ tôi có vẻ thiếu cái nhìn đẹp về nó trên cùng một dòng.

Tôi có thể thấy tại sao điều này xảy ra, vì nó có thể giống như một băm được chuyển thành biến thứ hai, nhưng không có dấu phẩy giữa các biến ... nhưng tôi cho rằng phải có cách để xử lý điều này mà tôi đang thiếu. Lanhung?

Trả lời

32

Bạn cần phải nghĩ giải lao luận của bạn:

something('hello') { do_it } 

Điều đó sẽ làm việc.

+0

yep, điều đó !! Cảm ơn. Đôi khi đó là những điều rõ ràng nhất bạn bỏ lỡ ;-) –

+0

@Cameron Booth: Vì vậy, có thể bạn có thể chấp nhận câu trả lời của mình? :) – Pistos

1

Nếu bạn muốn "def something" để chấp nhận một khối, bạn cần phải thu thập dữ liệu cho khối đó. Ví dụ:

#to uppercase string 
def something(my_input) 
yield my_input.upcase 
end 

# => "HELLO WORLD" 
something("hello world") { |i| puts i} 
+0

Đó là không hẳn đã đúng. Bạn có thể không có gì, chuyển khối sang phương thức khác hoặc chọn bỏ qua nó. Không có nhu cầu cụ thể để mang lại bất cứ điều gì cho khối. Cách mà phương thức trong câu hỏi ban đầu được viết, mật khẩu khối sẽ được chuyển đổi thành '' '' có tên là 'khối'. – nertzy

0

Uh, những gì về:

>> def something(arg1 , &block) 
>> yield block 
>> end 
=> nil 
>> def do_it 
>> puts "Doing it!" 
>> end 
=> nil 
>> something('hello') { do_it } 
"Doing it!" 
=> nil