Ruby 混淆类和对象之间的行为
因为我们知道类也是类的对象。我有一个疑问。 我在这里定义了一个类Foo和一个打印对象的方法Ruby 混淆类和对象之间的行为,ruby,metaprogramming,Ruby,Metaprogramming,因为我们知道类也是类的对象。我有一个疑问。 我在这里定义了一个类Foo和一个打印对象的方法 class Foo def bar puts self end puts self end 当我执行Foo.new.bar操作时,o/p将# 表示类Foo的对象。 为什么方法外部的self不打印#作为类的对象? 对不起,如果我的问题是错误的,请澄清。类和模块的名称在ruby中是常量。因此,当您定义一个类时,您正在创建一个class class的对象并为其提供一个常量名称,因此当您
class Foo
def bar
puts self
end
puts self
end
当我执行Foo.new.bar操作时,o/p将#
表示类Foo的对象。
为什么方法外部的self不打印#
作为类的对象?
对不起,如果我的问题是错误的,请澄清。类和模块的名称在ruby中是常量。因此,当您定义一个类时,您正在创建一个class class的对象并为其提供一个常量名称,因此当您在类上下文中执行
放置self
时,它会给出一个类名,而不是类似于
的类名和模块名在ruby中是常量。因此,当您定义一个类时,您正在创建一个class class的对象,并为其提供一个常量名称,因此当您在类上下文中执行放置self
时,它会给出一个类名,而不是类似
的内容。以下是定义类/对象的一种稍微不同的方法:
klass = Class.new {
puts self
def bar
puts self
end
}
# #<Class:0x3fbdbb8>
当您第一次用大写字母命名类时(例如示例
),它会将其作为输出,而不是像:#
这样的神秘名称
Foo = Class.new {
puts self
def bar
puts self
end
}
仍然输出神秘的名称,因为Foo=
的部分尚未计算
puts Foo
输出正确的名称-Foo
如果我再说一遍怎么办?
没什么
Foo
将永远是Foo
。以下是定义类/对象的一种稍微不同的方法:
klass = Class.new {
puts self
def bar
puts self
end
}
# #<Class:0x3fbdbb8>
当您第一次用大写字母命名类时(例如示例
),它会将其作为输出,而不是像:#
这样的神秘名称
Foo = Class.new {
puts self
def bar
puts self
end
}
仍然输出神秘的名称,因为Foo=
的部分尚未计算
puts Foo
输出正确的名称-Foo
如果我再说一遍怎么办?
没什么
Foo
将永远是Foo
。解析行class Foo
后,self
是Foo
并且在类解析完成之前执行puts self
<代码>放置self因此打印Foo
。稍后,当您创建实例并在其上调用bar
时,self
是Foo
的实例,因此这就是打印的内容。请仔细阅读。。在分析行class Foo
之后,self
是Foo
并且put self
在类的分析完成之前执行<代码>放置self因此打印Foo
。稍后,当您创建实例并在其上调用bar
时,self
是Foo
的实例,因此这就是打印的内容。请仔细阅读。。