0

我不是一个 OOP 的人,所以有人可以用外行的方式解释这个简单的概念。

当我从 foo.parent 函数调用 foo.child 时,它似乎将 A=7 参数向下传递到 foo.child 对象中,并按照我的预期覆盖或优先于 foo.child 中的 A=3 默认参数。

foo.parent <- function(A=7) foo.child(A)
foo.child <- function(A=3) 2+A
foo.parent(A=7)
#[1] 9

但是当我在 foo.parent 中实例化它时,参数 A=7 会向下传递或强制实例化对象使用 A=7; 相反,它使用子对象的参数 A=3

foo.child<-function(A=3) 2+A
foo.parent <- function(A=7){
  foo.child(A=3)
}
foo.parent(A=7)
#[1] 5

为什么会这样?我会用什么术语来描述这些差异?

4

2 回答 2

2

在您的第二个示例中,您没有赋予价值A(至少不是您可能认为的那样)。尝试

foo.child<-function(A=3) 2+A
foo.parent<-function(A=7){
     foo.child(A=A)
}
foo.parent(A=7)
foo.parent()

反而。所以,你在这里混合了两个不同A的 s。调用中的=符号function定义了如果您没有在函数调用中为该变量指定值会发生什么。

于 2013-02-25T16:35:57.633 回答
2

我认为您的问题是您不太了解默认参数的工作原理。所以

foo.child = function(A=1) 2+A

定义foo.child具有默认参数的函数A=1。所以,

foo.child()

给出 3. 现在在这个函数中

foo.parent = function(A=3){
   foo.child(A=4)
}

总是将值传递A=4给函数foo.child,因此,

foo.parent(A=7)
# 6

此外,当您试图弄清楚发生了什么时,具有不同的值会有所帮助A

于 2013-02-25T16:37:31.207 回答