我正在研究一种基于新类的动态类型编程语言,其中函数是一流的对象。在类中定义的函数(也称为方法)称为传递self作为第一个参数,而全局定义的函数不需要具有 self 参数。
在如下代码中:
func foo(a) {
return a*2;
}
class c3 {
var p1 = 555;
func init() {
p1 = foo;
}
}
class c2 {
var p1 = 333;
func init() {
p1 = c3();
}
}
class c1 {
var p1 = 111;
func init() {
p1 = c2();
}
}
func main() {
return c1().p1.p1.p1(1234);
}
编译器如何决定是否需要将self作为第一个参数传递给 p1(1234)?在这种情况下 p1 指向 foo 这是一个不需要self参数的全局函数。