2012-10-07 49 views
17

Tôi muốn lưu trữ một "khối mã" trong một biến được tái sử dụng, một cái gì đó như:Làm thế nào để lưu trữ ruby ​​khối mã

block = do 
|test| puts test 
end 

3.upto(8) block 

Ai đó có thể chỉ cho tôi những gì tôi làm như vậy rõ ràng là sai? (Hoặc nếu nó chỉ là không thể)

Trả lời

24

Có rất nhiều cách để làm điều này trong Ruby, một trong số đó là sử dụng một Proc:

foo=Proc.new do |test| 
    puts test 
end 

3.upto(8) { foo.call("hello world") } 

Đọc thêm về Procs:

Cập nhật, phương pháp trên có thể được viết lại như sau:

# using lower-case **proc** syntax, all on one line 
foo = proc { |test| puts test } 
3.upto(8) { foo.call("hello world") } 

# using lambda, just switch the method name from proc to lambda 
bar = lambda { |test| puts test } 
3.upto(8) { bar.call("hello world") } 

Về cơ bản chúng là các phương pháp tương tự, với sự khác biệt tinh tế.

Và cuối cùng, có lẽ có nhiều cách thanh lịch hơn để làm những gì tôi đã vạch ra, hãy lắng nghe ý kiến ​​của mọi người với cách tốt hơn. Hi vọng điêu nay co ich.

+2

Cảm ơn rất nhiều. Đối với liên kết nhiều hơn. Bạn có thể tử tế đến mức đề cập đến cả lambdas nữa không? Vì mục đích lịch sử. –

+0

@Shingetsu, tôi đã thêm và cập nhật với lambda, cũng như phiên bản đơn giản hóa của phương pháp proc quá – stephenmurdoch

+3

@Shingetsu: Lambdas không phải là lịch sử. Bạn hầu như nên luôn luôn * sử dụng chúng thay vì Procs. Chúng hoàn toàn nổi bật hơn và là tiêu chuẩn. – Linuxios

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