[英]Making things available only inside Ruby blocks
有什么方法可以使方法和函數僅在塊內可用? 我正在嘗試做的是:
some_block do
available_only_in_block
is_this_here?
okay_cool
end
但是is_this_here?
, okay_cool
等,只能在該塊內部訪問,而不能在該塊外部訪問。 有任何想法嗎?
將帶有您要使用的方法的對象作為參數傳遞給塊。 這是Ruby中廣泛使用的模式,例如IO.open
或XML builder中 。
some_block do |thing|
thing.available_only_in_block
thing.is_this_here?
thing.okay_cool
end
請注意,您可以更接近使用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
當您傳遞參數時,您始終會知道要指的是什么:
def with_foo
yield Foo.new
end
with_foo { |x| x.bar } #=> "Hello"
bar = 10
x = 20
with_foo { |x| x.bar } #=> "Hello"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.