ruby - 是否可以使用 block 定义 Ruby 单例方法?

标签 ruby closures singleton-methods

所以,我想为一个对象定义一个单例方法,但我想用闭包来实现。

例如,

def define_say(obj, msg)
  def obj.say
    puts msg
  end
end

o = Object.new
define_say o, "hello world!"
o.say

这不起作用,因为通过“def”定义单例方法不是闭包,所以我得到一个异常,“msg”是 undefined variable 或方法。

我想做的是在 Module 类中使用“define_method”方法,但据我所知,这只能用于在类上定义一个方法......但我想要一个单例方法...

所以,我很想这样写:

def define_say(obj, msg)
  obj.define_singleton_method(:say) {
    puts msg
  }
end

有谁知道我如何才能实现这一点,而不必创建一个方法来存储 Proc,然后在单例方法中使用 Proc? (基本上,我想要一种干净的、非 hacky 的方式来做到这一点)

最佳答案

Object#define_singleton_method顺便添加到ruby-1.9.2:

def define_say(obj, msg)
  obj.define_singleton_method(:say) do
    puts msg
  end
end

关于ruby - 是否可以使用 block 定义 Ruby 单例方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/135995/

相关文章:

c++ - Lambda 捕获

ruby - xvfb 在带显示器的机器上,应用程序可以运行 'in the background?'

ruby-on-rails - 图像未删除 Carrierwave

ruby-on-rails - 联系第 3 方 API 时的错误处理

ios - iOS swift 中所有对象的相同引用

c# - 单例设计模式中私有(private)构造函数的需求是什么?

ruby - RSpec 类变量测试

iphone - 将 block 闭包存储为 IBAction

ruby - 为什么我不能将单例方法附加到另一个对象?

Java - 无限循环单例类方法调用