【发布时间】:2014-01-22 19:48:32
【问题描述】:
我试图弄清楚NextMethod() 的工作原理。我在 Chambers & Hastie (edts.) 的 Statistical Models in S (1993, Chapman & Hall) 中找到了关于 S3 类系统的最详细解释,但我发现有关 @987654322 的部分@ 调用有点晦涩。以下是我试图理解的相关段落(第 268-269 页)。
现在转向作为调用结果调用的方法
NextMethod(),它们的行为就像是从 以前的方法有一个特殊的调用。调用中的参数 继承的方法在数量、顺序和实参上都相同 名称与调用当前方法中的名称相同(因此,在 对泛型的调用)。然而,参数的表达式, 是当前的相应形式参数的名称 方法。例如,假设表达式print(ratings)具有 调用了方法print.ordered()。当此方法调用NextMethod(),这相当于调用print.factor()print.factor(x)的形式,其中x在这里是框架中的xprint.ordered()。如果多个参数与形式参数匹配 “...”,这些参数在对继承的调用中表示 方法 y 特殊名称“..1”、“..2”等。评估者认可 这些名称并适当地对待它们(参见第 476 页的 示例)。存在这个相当微妙的定义是为了确保 S 中的函数调用尽可能干净地传递给 方法(比较 Becker、Chambers 和 Wilks 的新 S 语言, 第 354 页)。特别是:
- 在调用
NextMethod()时,参数会以其当前值从当前方法传递到继承的方法。- 延迟评估继续有效;未评估的参数保持未评估。
- 继承的方法中仍然缺少缺少的参数。
- 通过“
...”形式参数传递的参数以正确的参数名称到达。- 框架中与调用中的实际参数不对应的对象将不会传递给继承的方法。"
继承过程基本上是透明的 论据去。
我感到困惑的两点是:
- 什么是“当前方法”,什么是“以前的方法”?
- “对继承方法的调用中的参数”、“参数的表达式”和“当前方法的相应形式参数的名称”有什么区别?
一般来说,如果有人能以清晰的方式重述上述段落中的描述,我将不胜感激。
【问题讨论】:
标签: r oop inheritance methods parametric-polymorphism