Hi all,
这个语法是我在 Rails 里发现的:
def f
Module.new &Proc.new
end
M = f do
def self.x
'hello world'
end
end
M.x # => "Hello world"
事实上这个案例可以直接简化成:
def f
Proc.new
end
(f { |name| 'hello, ' + name }).call 'bachue'
# => "hello, bachue"
原来Proc.new
只要不传入 block 就默认自动接受其调用者的 block,这个语法我以前还真的没看到过诶。
不仅仅是Proc.new
,proc
, lambda
也类似,只是有时会出现警告而已,但依然可以工作。