Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UseMethod在R中的工作方式_R - Fatal编程技术网

UseMethod在R中的工作方式

UseMethod在R中的工作方式,r,R,下面我的演绎推理是,输出应该是“char 10” 根据使用方法的文件: 查找调用函数的上下文(泛型):这将为原始调用提供未赋值的参数 计算要用于分派的对象(通常是参数),并找到方法(可能是默认方法)或抛出错误 创建一个用于评估方法的环境,并在该环境中插入特殊变量(见下文)。还要复制泛型环境中不是形式(或实际)参数的任何变量 将参数列表设置为与方法的形式匹配的调用参数 如果我理解正确,在步骤2中,x将被计算为“a”。但在步骤3中,将另一个值为10的变量x插入到环境中以执行该方法 现在不是把x改写成

下面我的演绎推理是,输出应该是“char 10”

根据使用方法的文件:

  • 查找调用函数的上下文(泛型):这将为原始调用提供未赋值的参数

  • 计算要用于分派的对象(通常是参数),并找到方法(可能是默认方法)或抛出错误

  • 创建一个用于评估方法的环境,并在该环境中插入特殊变量(见下文)。还要复制泛型环境中不是形式(或实际)参数的任何变量

  • 将参数列表设置为与方法的形式匹配的调用参数

  • 如果我理解正确,在步骤2中,x将被计算为“a”。但在步骤3中,将另一个值为10的变量x插入到环境中以执行该方法

    现在不是把x改写成10了吗?最后在步骤4中,参数与方法的参数匹配。所以x,也就是10,现在是这个方法的参数

    我对

    的错误是什么?使用方法

    方法分派是基于第一个参数的类发生的 作为参数提供给的对象的泛型函数或 “UseMethod”或“NextMethod”

    所以在这种情况下

    [1] "char a"
    
    当您调用
    h(“a”)
    时,它将调用
    h.numeric
    ,因为它是作为参数提供给的对象的类UseMethod(类) “使用方法”


    因此,在调用泛型函数时,下面将给出
    “char 10”
    作为输出

    h <- function(x) {
      x <- 10
      UseMethod("h", x)
    }
    
    h("a")
    #[1] "num a"
    

    zz那么当你调用,
    h(“a”)
    时,执行的函数是
    h,如果调用了
    h(7)
    ,那么
    x我想这就是第3节中解释的。创建用于评估方法的环境。。。复制任何非形式(或实际)参数的泛型变量。
    
    h <- function(x) {
      x <- 10
      UseMethod("h")
    }
    
    h("a")
    #[1] "char a"
    
    h <- function(x) {
      x <- 10
      UseMethod("h", x)
    }
    
    h("a")
    #[1] "num a"
    
    zz <- function(x) {
    
       UseMethod("zz", "w")
    }
    zz.character <- function(x){ paste("char", x)}
    zz.numeric <- function(x) { paste("num", x)}
    
    zz(10)
    #[1] "char 10"