簡體   English   中英

使事物僅在Ruby塊內可用

[英]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.openXML builder中

some_block do |thing|
    thing.available_only_in_block
    thing.is_this_here?
    thing.okay_cool
end

請注意,您可以更接近使用instance_evalinstance_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM