理解Ruby开放类
我试图理解ruby开放类的工作原理。特别是如何将方法添加到现有类中 必须应用一些逻辑来确定类是否已经存在 有人能解释一下这个概念吗理解Ruby开放类,ruby,Ruby,我试图理解ruby开放类的工作原理。特别是如何将方法添加到现有类中 必须应用一些逻辑来确定类是否已经存在 有人能解释一下这个概念吗 提前感谢。类名是常量,因此很容易看到类名是否已经存在: Object.constants.grep(/Array/) #=> ["Array"] 因此,如果已经定义了一个类(Object.const\u get('Array')。它是一个类吗?),则会将方法添加到该类中,否则会定义一个新类。更准确地说,这发生在Ruby的C端,但大体上是这样的。类名是常量,因
提前感谢。类名是常量,因此很容易看到类名是否已经存在:
Object.constants.grep(/Array/) #=> ["Array"]
因此,如果已经定义了一个类(
Object.const\u get('Array')。它是一个类吗?
),则会将方法添加到该类中,否则会定义一个新类。更准确地说,这发生在Ruby的C端,但大体上是这样的。类名是常量,因此很容易看出类名是否已经存在:
Object.constants.grep(/Array/) #=> ["Array"]
因此,如果已经定义了一个类(
Object.const\u get('Array')。它是一个类吗?
),则会将方法添加到该类中,否则会定义一个新类。更准确地说,这种情况发生在Ruby的C端,但基本上就是这样。在Ruby下面,有一些消息
假设您有一个类a
,并且a
是a
的一个实例。实际上涉及到几个类别:
Basic Object
-> Object
-> A
-> a
当您在a
上调用方法foo时,实际发生的是您正在将消息“call foo”发送到a
。它检查是否为a
定义了实例方法(如singleton/eigenclass),然后尝试a
的实例方法,然后是对象
,最后是基本对象
。如果所有其他操作都失败,VM将发送一条新消息(即“找不到方法”),然后该过程将再次启动,直到被捕获为止(默认情况下,它会引发异常)
您可以向层次结构中的任何类添加新方法(即消息处理程序),以更改a
的行为。如果将实例方法添加到A
或对象
,则A
将拥有它。如果仅向a
添加方法(即def a.bar;'bar';end
),则a
的其他实例将具有该方法
Ruby的类(我认为更合适的说法是Ruby的对象)是开放的,因为您可以在任何时间点添加这些新方法,即消息处理程序,包括在定义它们之后的很长一段时间 假设您有一个类
a
,并且a
是a
的一个实例。实际上涉及到几个类别:
Basic Object
-> Object
-> A
-> a
当您在a
上调用方法foo时,实际发生的是您正在将消息“call foo”发送到a
。它检查是否为a
定义了实例方法(如singleton/eigenclass),然后尝试a
的实例方法,然后是对象
,最后是基本对象
。如果所有其他操作都失败,VM将发送一条新消息(即“找不到方法”),然后该过程将再次启动,直到被捕获为止(默认情况下,它会引发异常)
您可以向层次结构中的任何类添加新方法(即消息处理程序),以更改a
的行为。如果将实例方法添加到A
或对象
,则A
将拥有它。如果仅向a
添加方法(即def a.bar;'bar';end
),则a
的其他实例将具有该方法
Ruby的类(我认为说Ruby的对象更合适)是开放的,因为您可以添加这些新方法,即消息处理程序,在任何时间点——包括定义它们之后的很长时间。您的意思是如何实现
class
关键字以查看类是否已经存在?您的意思是如何实现class
关键字以查看类是否已经存在?