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

2番目の例では、値を指定していませんA(少なくとも、思ったほどではありません)。試す

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

代わりは。したがって、ここで 2 つの異なる を混合しますA。呼び出し内の=記号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 に答える