直接实现接口时的快捷方式语法

时间:2016-02-25 11:51:48

标签: ceylon

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

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

这将接近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);

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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);

Try online

答案 2 :(得分: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;
}