54
голосов
3ответов
14549 просмотров

Why does explicit return make a difference in a Proc?

def foo f = Proc.new { return "return from foo from inside proc" } f.call # control leaves foo here return "return from foo" end def bar b = Proc.new { "return from bar from inside proc" } b.call # control leaves bar here return "return from bar" end puts foo # prints "return from...

0
голосов
2ответов
107 просмотров

How can two arguments be passed to a method with a one-argument signature?

s = Proc.new {|x|x*2} def one_arg(x) puts yield(x) end one_arg(5, &s) How does one_arg know about &s?

0
голосов
1ответов
112 просмотров

ArgumentError calling a Proc

s = Proc.new {|x|x*2} puts s.call(5) -> 10 def foo(&a) a.call(5) end puts "test foo:" foo(s) When I try to call the proc above, I get: foo: wrong number of arguments (1 for 0) (ArgumentError) My expectation was that I can pass a proc to a method if the method is defined with this t...

0
голосов
1ответов
117 просмотров

Why does this code produce a nil following a Proc.call?

C:ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32] gt;irb irb(main):001:0> s = Proc.new { puts "Hello" } => #<Proc:[email protected](irb):1> irb(main):002:0> s.call Hello => nil What causes the nil? 12321

16
голосов
4ответов
6973 просмотров

Как вы структурируете / сериализуете код Ruby?

Я хочу иметь возможность написать лямбда / Proc в моем коде Ruby, сериализовать его, чтобы я мог записать его на диск, а затем выполнить лямбда позже. Вроде как ... x = 40 f = lambda { |y| x + y } save_for_later(f) Позже, при отдельном запуске интерпретатора Ruby, я хочу иметь возможность...

21
голосов
7ответов
7699 просмотров

Как маршалировать лямбду (Proc) в Ruby?

Джо Ван Дайк спросил список рассылки Ruby : Привет, В Ruby, я думаю, вы не можете маршалировать объект лямбда / proc, верно? Является что возможно на лиспе или других языках? Что я пытался сделать: l = lamda { ... } Bj.submit "/path/to/ruby/program", :stdin => Marsh...