5.5 NextMethod 函数
Next: Group methods,Previous: UseMethod,Up: Object-oriented programming
5.5 NextMethod 函数
调用 NextMethod 产生的方法调用在行为上似乎它们被前面的方法调用。参数以当前调用方法一样的次序和名字传递给后面继承的方法。这意味着它们和泛型调用一样。但是作为参数的表达式是当前方法对应的形式参数名字。因此,在NextMethod被调用时,参数已经有它们的对应值了。
未求值的参数仍未求值。缺失的参数仍然缺失。
调用 NextMethod 的语法是 NextMethod(generic,object, ...)。如果没有提供 generic,.Generic 的值将会被使用。如果没有提供object,当前方法调用的第一个参数将会被使用。... 参数的值用于修改下一个方法的参数。
需要注意的是,下一个方法的选择依赖于 .Generic 和 .Class的当前值,而不是对象。因此改变NextMethod调用中的对象影响下一个方法接受的参数但不影响下一个方法的选择。
方法可以直接调用。如果那样,就不会有.Generic, .Class 或 .Method。这种情况下,NextMethod的generic参数必须指定。.Class的值设为当前函数的第一个参数对象的类属性。.Method 的值是当前函数的名字。默认值的选择保证了一个方法无论在直接调用还是通过泛型调用的情况下行为不会改变。
一个值得讨论的问题是NextMethod里面...参数的行为。白皮书(White Book)描述该行为如下:
- 在调用当前方法时用命名参数代替对应的参数。未命名的参数放在参数列表的起始位置。
我们想做的是:
-首先为NextMethod进行参数匹配; -如果对象或泛型匹配不错 -首先,如果一个命名的列表元素匹配一个参数(命名的或者没有名字的), 列表值代替参数值 - 第一个未命名的列表元素
搜索用的值: 类:首先来自 .Class,其次来自方法的第一个参数,最后来自 调用NextMethod时设定的对象
泛型:首先来自 .Generic,如果没有的话,则来自方法的第一个参数, 如果仍然缺失,则来自NextMethod的调用
方法:这可能是当前函数的名字。
Hits:Loading...
- Previous Page: 5.4 UseMethod 函数
- Next Page: 5.6 成组方法
