如何在 Ruby 中为块定义方法?

问题描述 投票:0回答:1

我正在努力完成这项工作(这是一个简化的示例):

console do
  say "Hello"
  say "Bye"
end

在这里,我想以某种方式使

say
方法仅在提供给
console
方法的块内可用。假设
console
只是将参数打印到 stdout,您将如何定义
say
方法?

ruby
1个回答
1
投票

您可以使用

instance_eval
来评估响应
say
的对象上下文中的块。该对象可以是提供 DSL 的类的实例,例如:

class DSL
  def say(arg)
    puts arg
  end
end

def console(&block)
  dsl = DSL.new
  dsl.instance_eval(&block)
end

console do
  say "Hello"
  say "Bye"
end
© www.soinside.com 2019 - 2024. All rights reserved.