Ruby 在块内运行方法类

Ruby 在块内运行方法类,ruby,Ruby,如何在ruby中的块中使用实例变量和方法 class Foo @var = "my var" def meth() "my method" end Module.something do |variable| p @var #=> Undefined p meth() #=> Undefined end end 我不确定自己是否完全理解上下文,但这可能有助于: class Foo def initialize @va

如何在ruby中的块中使用实例变量和方法

class Foo
  @var = "my var"
  def meth()
    "my method"
  end

  Module.something do |variable|
    p @var    #=> Undefined
    p meth()  #=> Undefined
  end
end

我不确定自己是否完全理解上下文,但这可能有助于:

class Foo
  def initialize
    @var = "my var"
  end
  def meth()
    "my method"
  end
  def fee
    AModule.something do |variable|
      p @var
      p meth() 
      p variable
    end
  end
end

# test:

module AModule
  def self.something
    yield "bar"
  end
end

foo = Foo.new
foo.fee

您可以使用
instance\u eval
,但您需要一个实例来调用它。这很混乱,只会给您带来麻烦。我将显式地传递var(或self)并通过其方法访问它。如果期望您能够从外部关闭一些东西,那么Module.something编写得很糟糕假设Module是一个外部库。我无法修改模块。但我需要使用实例中的数据。如果模块是外部的,您应该传入它需要的内容。模块的编写者无法知道您的类将定义什么。