ruby - 如何使 block 中调用的方法能够查看调用函数上下文中设置的变量?

标签 ruby

我有一个定义方法logged的模块,它将为不同方法的结果添加前缀,say:

module M
  def logged(&block)
    str = "logged: "
    block.call
  end

  def say(value)
    puts str + value
  end
end

我希望能够在 class block 的主体内使用 M,如下所示:

class C
  extend M

  logged {
    say "one"
    say "two"
  }
end

并得到:

# => "logged: one"
# => "logged: two"

本质上,我希望 say 能够访问 logged 中仅位于 logged 调用上下文中的值。因此,我宁愿避免实例变量、全局变量等等。

实现这一目标的正确方法是什么?

最佳答案

这是一种方法:-

module M
  def logged(&block)
    str = "logged: "
    block.call(str)
  end

  def say(str, value)
    puts str + value
  end
end

class C
  extend M

  logged { |s|
    say s, "one"
    say s, "two"
  }
end

关于ruby - 如何使 block 中调用的方法能够查看调用函数上下文中设置的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23261621/

相关文章:

ruby 新手 : Counter with 5 digit numbers

ruby - 按对象属性对 Ruby 中的对象数组进行排序?

arrays - Ruby:0 处的错误元素类型符号(预期数组)

ruby - 如何重命名 gem 集?

ruby-on-rails - 即使 gemspec 将其添加为运行时依赖项,也需要在应用程序中引入 gem 吗?

ruby-on-rails - 将 AWS SQS 与 Ruby on Rails 结合使用

ruby-on-rails - 安装 RVM 后 Rails 出现问题

ruby - 在数字上拆分字符串,保留数字

ruby - 如何在使用 gpgme 解密文件时绕过 pinentry(密码屏幕)

arrays - 检查一个数组中的所有字符串是否都在另一个数组中