Class.new块的参数

时间:2016-07-23 23:10:17

标签: ruby

您可以使用Object方法在const_set上将类定义为常量。是否有人将参数传递到Class.new块?

是否有任何有趣或有启发性的用例
Object.const_set(:Klass, Class.new do |can_i_use_this| 
  def ping
    "pong"
  end
end)

Klass.new.ping

你能用它做点什么吗?

1 个答案:

答案 0 :(得分:2)

事实证明,block参数是您正在创建的类。在irb中运行此代码段

Class.new do |what|
  p what
end

你会看到像

这样的东西
#<Class:0x000000022b2698>
 => #<Class:0x000000022b2698>

第一行输出由p what给出,第二行显示Class.new的返回值,我们知道它是类。您可以看到whatClass.new的返回值是同一个对象。

结论:block参数不是很有用,因为你可以在该类中使用self来获取类实例。我能想象的唯一用法是使用名为 flat scope 的技巧来创建方法。

Foo = Class.new do |klass|
  define_method :class_name do
    klass.name
  end
end

Foo.new.class_name  #=> "Foo"

然而,这不是很有用,因为对象可以使用self.class轻松访问其类。