有没有办法让方法和功能只在块内可用?我正在做的事情:
some_block do
available_only_in_block
is_this_here?
okay_cool
end
Run Code Online (Sandbox Code Playgroud)
但是is_this_here?,okay_cool等仅仅是访问该块里面,不是外面.有什么想法吗?
将具有您希望可用的方法的对象作为参数传递给块.这是一种在Ruby中广泛使用的模式,例如in IO.open或XML builder.
some_block do |thing|
thing.available_only_in_block
thing.is_this_here?
thing.okay_cool
end
Run Code Online (Sandbox Code Playgroud)
需要注意的是,你可以得到更接近你的要求使用instance_eval或instance_exec,但通常是一个糟糕的主意,因为它可以有相当惊人的后果.
class Foo
def bar
"Hello"
end
end
def with_foo &block
Foo.new.instance_exec &block
end
with_foo { bar } #=> "Hello"
bar = 10
with_foo { bar } #=> 10
with_foo { self.bar } #=> "Hello
Run Code Online (Sandbox Code Playgroud)
如果你通过论证,你总是知道你会指的是什么:
def with_foo
yield Foo.new
end
with_foo { |x| x.bar } #=> "Hello"
bar = 10
x = 20
with_foo { |x| x.bar } #=> "Hello"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |