h <- function(x) {
x <- 10
UseMethod("h")
}
h.character <- function(x){ paste("char", x)}
h.numeric <- function(x) { paste("num", x)}
h("a")
Run Code Online (Sandbox Code Playgroud)
上面的代码将输出:
[1] "char a"
Run Code Online (Sandbox Code Playgroud)
我的演绎推理,从下面来看,输出应该是“char 10”。
根据 UseMethod 的文档:
找到调用函数(通用函数)的上下文:这为我们提供了原始调用的未计算参数。
评估用于调度的对象(通常是参数),并找到一个方法(可能是默认方法)或抛出错误。
创建一个用于评估该方法的环境,并将特殊变量(见下文)插入该环境中。还要复制泛型环境中非形式(或实际)参数的任何变量。
将参数列表修复为与方法的形式匹配的调用参数。
如果我理解正确的话,在步骤 2 中,x 将被评估为“a”。但随后在步骤 3 中,另一个值为 10 的变量 x 被插入到环境中以执行该方法。
现在不会将 x 覆盖为 10 吗?最后在步骤 4 中,参数与方法的参数相匹配。因此 x(即 10)现在是该方法的参数。
我做错了什么
Sur*_*ren 10
来自?UseMethod
\n\n\n\n\n方法调度基于泛型函数的第一个参数的类或作为参数提供给\n \xe2\x80\x98UseMethod\xe2\x80\x99 或 \xe2\x80\ 的对象的类进行x98NextMethod\xe2\x80\x99。
\n
所以在这种情况下
\n\nh <- function(x) {\n x <- 10\n UseMethod("h")\n}\n\nh("a")\n#[1] "char a"\nRun Code Online (Sandbox Code Playgroud)\n\n要调用哪个函数取决于您使用\nh 调用时的类 (泛型函数的第一个参数的类)。"a"h("a")
但如果你有
\n\nh <- function(x) {\n x <- 10\n UseMethod("h", x)\n}\n\nh("a")\n#[1] "num a"\nRun Code Online (Sandbox Code Playgroud)\n\n当您调用它时,h("a")它将调用,h.numeric因为它是给定类 UseMethod (作为参数提供给\n \xe2\x80\x98UseMethod\xe2\x80\x99 的对象的 class(es) ... )。
"char 10"因此,当您调用通用函数时,以下内容将作为输出给出。
zz <- function(x) {\n\n UseMethod("zz", "w")\n}\nzz.character <- function(x){ paste("char", x)}\nzz.numeric <- function(x) { paste("num", x)}\n\nzz(10)\n#[1] "char 10"\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2459 次 |
| 最近记录: |