您可以使用Object
方法在const_set
上将类定义为常量。是否有人将参数传递到Class.new
块?
Object.const_set(:Klass, Class.new do |can_i_use_this|
def ping
"pong"
end
end)
Klass.new.ping
你能用它做点什么吗?
答案 0 :(得分:2)
事实证明,block参数是您正在创建的类。在irb中运行此代码段
Class.new do |what|
p what
end
你会看到像
这样的东西#<Class:0x000000022b2698>
=> #<Class:0x000000022b2698>
第一行输出由p what
给出,第二行显示Class.new
的返回值,我们知道它是类。您可以看到what
与Class.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
轻松访问其类。