Groovy:使用元类向实例和类添加方法不会';不行?

Groovy:使用元类向实例和类添加方法不会';不行?,groovy,metaprogramming,metaclass,Groovy,Metaprogramming,Metaclass,请参阅下面的代码。在使用元类将方法添加到类之前创建的类的旧实例不应该理解该方法,对吗?“Problem LINE”注释下面的assert语句是在我认为不应该执行的情况下执行的,因为旧的parentDir实例不应该理解blech()消息 脚本以捕获的java.lang.AssertionError:old instance parentDir不应理解blech()消息结束其执行。表达式:false 在x.run时(x.groovy:35) 。您是否不希望blech方法起作用?我不明白为什么不这样做

请参阅下面的代码。在使用元类将方法添加到类之前创建的类的旧实例不应该理解该方法,对吗?“Problem LINE”注释下面的assert语句是在我认为不应该执行的情况下执行的,因为旧的parentDir实例不应该理解blech()消息


脚本以捕获的
java.lang.AssertionError:old instance parentDir不应理解blech()消息结束其执行。表达式:false
在x.run时(x.groovy:35)

。您是否不希望
blech
方法起作用?我不明白为什么不这样做,因为您正在将它添加到
文件
元类,而不仅仅是对象的元类。

脚本在执行结束时使用
捕获:java.lang.AssertionError:旧实例parentDir不应理解blech()消息。表达式:false
在x.run时(x.groovy:35)
。您是否不希望
blech
方法起作用?我不明白为什么不可以,因为您正在将它添加到
文件
元类,而不仅仅是对象的元类。

行:

parentDir.blech()
如您所说,在将blech()添加到文件后成功执行。但如果是这样的话,为什么不在上面打电话呢

thisDir.blech()
work(不抛出它确实抛出的异常),因为它是类File的另一个实例,并且blech()已添加到该文件中?要么两个调用都会失败并出现MissingMethodException,要么两个调用都会工作。一个工作,另一个不工作,这太傻了。

行:

parentDir.blech()
如您所说,在将blech()添加到文件后成功执行。但如果是这样的话,为什么不在上面打电话呢

thisDir.blech()
work(不抛出它确实抛出的异常),因为它是类File的另一个实例,并且blech()已添加到该文件中?要么两个调用都会失败并出现MissingMethodException,要么两个调用都会工作。一个能行,另一个不行,真傻

旧的parentDir实例不应 理解blech()消息

这不是
元类
的工作方式。您显然来自一种基于原型的OO语言(JavaScript?)。Groovy不是基于原型的。对类的更改会影响该类的所有实例,包括在进行更改之前创建的实例

旧的parentDir实例不应 理解blech()消息

这不是
元类
的工作方式。您显然来自一种基于原型的OO语言(JavaScript?)。Groovy不是基于原型的。对类的更改会影响该类的所有实例,包括在进行更改之前创建的实例