方法的数量
Arity of methods
在对方法函数的arity进行分类时,是否需要考虑使用this
?例如:
// Unary
function double(num) {
return num * 2;
}
// Binary
function add(num1, num2) {
return num1 + num2;
}
class Calc {
value;
// Unary or binary?
add(num1) {
return this.value + num1;
}
// Nullary or unary?
double() {
return this.value * 2;
}
}
我一直认为 this
是一个隐式参数。
(我假设对此有一个与语言无关的答案,但 JavaScript 我最感兴趣的答案是)
在我看来,this
不是参数,而是执行方法的上下文,所以add
方法是一元的,double
方法是无效。
C++ 和其他 OOP 语言允许我们这样写:
C a,b,c;
c = a + b;
(C
是 class, a
, b
和 c
是 class C
)
class C
可以将 +
运算符定义为方法或友元函数。作为一种方法,它接受一个参数(它是第二个操作数,第一个操作数是 this
)。作为友元函数,它需要两个参数(两个操作数)。
加法是一个二元运算符(我们从数学上知道这一点,上面的用法不能否认这一点)。事实上,在 C++
中它可以作为一种只接受一个显式参数的方法来实现,这只是一个实现细节。它的实际数量由它需要使用的值的数量决定。
底线是:this
必须算作一个参数。如果函数不使用它,那么它不应该是实例方法,而是 class 方法或独立函数。
在对方法函数的arity进行分类时,是否需要考虑使用this
?例如:
// Unary
function double(num) {
return num * 2;
}
// Binary
function add(num1, num2) {
return num1 + num2;
}
class Calc {
value;
// Unary or binary?
add(num1) {
return this.value + num1;
}
// Nullary or unary?
double() {
return this.value * 2;
}
}
我一直认为 this
是一个隐式参数。
(我假设对此有一个与语言无关的答案,但 JavaScript 我最感兴趣的答案是)
在我看来,this
不是参数,而是执行方法的上下文,所以add
方法是一元的,double
方法是无效。
C++ 和其他 OOP 语言允许我们这样写:
C a,b,c;
c = a + b;
(C
是 class, a
, b
和 c
是 class C
)
class C
可以将 +
运算符定义为方法或友元函数。作为一种方法,它接受一个参数(它是第二个操作数,第一个操作数是 this
)。作为友元函数,它需要两个参数(两个操作数)。
加法是一个二元运算符(我们从数学上知道这一点,上面的用法不能否认这一点)。事实上,在 C++
中它可以作为一种只接受一个显式参数的方法来实现,这只是一个实现细节。它的实际数量由它需要使用的值的数量决定。
底线是:this
必须算作一个参数。如果函数不使用它,那么它不应该是实例方法,而是 class 方法或独立函数。