0

是否有可能以这样的方式实现锡兰类型检查器,即直接满足接口的类(成员签名中的类型与被满足的接口中的类型相同)可以省略其自己的成员签名中的类型?

这将有助于通过将所有元信息(类型、注释)移动到界面来减少实现站点的视觉混乱。它有助于专注于实现细节。

这将接近 ocaml 中的签名文件。

它可以帮助说得更多,更清楚。

在 Lukas Werkmeister 给出答案后编辑:

我想要的是一种快捷语法,它不仅适用于属性,也适用于方法。

查看 Person 类中的“name(x)”:

interface Named {
    shared formal String name(String n);
}
class Person(shared String  firstName, shared String lastName) satisfies Named {

    name(x) => firstName + x +" " + lastName;

}

Named named = Person("Lucas", "Werkmeister");
print(named.name);
4

3 回答 3

3

这是不允许的,因为它在语法上有点过于模棱两可。也就是说,解析器不可能与name(x, y, z)调用表达式区分开来,直到它最终命中=>. 这会导致一些非常不受欢迎的行为,例如,在 IDE 中,当您开始输入快捷方式优化时,解析器会将其视为调用表达式,并在xy和 上显示错误z

一般来说,我们非常小心地确保我们没有任何需要太多前瞻才能理解的语法结构。

于 2016-02-26T08:14:39.713 回答
1

快捷方式细化也适用于方法,您只需要指定参数类型:

interface Named {
    shared formal String name(String n);
}

class Person(shared String  firstName, shared String lastName) satisfies Named {
    name(String x) => firstName + x +" " + lastName;
}
于 2016-02-25T19:35:45.490 回答
1

是的,使用快捷优化语法:您可以简单地编写thing => ...;而不是shared actual Type thing => ...;. 例如

interface Named {
    shared formal String name;
}
class Person(firstName, lastName) satisfies Named {
    shared String firstName;
    shared String lastName;

    name => firstName + " " + lastName;
    // shortcut for
    // shared actual String name => …;
}

Named named = Person("Lucas", "Werkmeister");
print(named.name);

在线尝试

于 2016-02-25T12:38:11.240 回答