将数据“显式”传递给函数,而将方法“隐式传递”到调用它的对象。
请问您能解释这两种传递数据的方式之间的区别吗? java或c#中的一个例子会有所帮助。
答案 0 :(得分:4)
语言Java和Python是说明这一点的好例子。在Python中,只要定义了类的方法,就会显式传递对象:
class Example(object):
def method(self, a, b):
print a, b
# The variable self can be used to access the current object
这里,对象self
显式传递为第一个参数。这意味着
e = Example()
e.method(3, 4)
如果method(e, 3, 4)
是函数,实际上与调用method
相同。
但是,在Java中没有明确提到第一个参数:
public class Example {
public void method(int a, int b) {
System.out.println(a + " " + b);
// The variable this can be used to access the current object
}
}
在Java中,它将是:
Example e = Example();
e.method(3, 4);
实例e
也会传递给method
,但可以使用特殊变量this
来访问它。
当然,对于函数,每个参数都是显式传递的,因为函数定义和调用函数的位置都提到了每个参数。如果我们定义
def func(a, b, c):
print a, b, c
然后我们可以用func(1, 2, 3)
来调用它,这意味着所有参数都被显式传递。
答案 1 :(得分:1)
在此上下文中,可以将方法视为可以访问其绑定的对象的函数。可以从方法访问此对象的任何属性,即使它们未出现在函数的签名中。你没有指定一种语言,但让我举一个PHP的例子,因为即使你没有使用它,它也非常流行且易于阅读。
编辑:我写这篇文章后添加了语言;也许有人可以根据需要将其翻译成其中一种语言。
<?php
/* Explicit passing to a function */
function f($a, b)
{
return $a + b;
}
// f(1, 2) == 3
class C
{
public $a, $b;
/* $a and $b are not in the parameter list. They're accessed via the special $this variable that points to the current object. */
public function m()
{
return $this->a + $this->b;
}
}
$o = new C();
$o->a = 1;
$o->b = 2;
//$o->m() == 3