方法的数量

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, bc 是 class C)

class C 可以将 + 运算符定义为方法或友元函数。作为一种方法,它接受一个参数(它是第二个操作数,第一个操作数是 this)。作为友元函数,它需要两个参数(两个操作数)。

加法是一个二元运算符(我们从数学上知道这一点,上面的用法不能否认这一点)。事实上,在 C++ 中它可以作为一种只接受一个显式参数的方法来实现,这只是一个实现细节。它的实际数量由它需要使用的值的数量决定。

底线是:this 必须算作一个参数。如果函数不使用它,那么它不应该是实例方法,而是 class 方法或独立函数。