If statement 检查枚举类的类型
我有一个枚举的抽象类:If statement 检查枚举类的类型,if-statement,ceylon,If Statement,Ceylon,我有一个枚举的抽象类: shared abstract class Foo() of bar|baz {} 以及尝试检查Foo是否不是条的函数: shared void test(Foo foo) { if (!is bar foo) { } } 我得到了错误 incorrect syntax: no viable alternative at token 'bar' 因为bar是一个枚举实例,所以它只是一个值,而不是一个类型。但是它确实有一个比Foo更具体的类型,您可以
shared abstract class Foo() of bar|baz {}
以及尝试检查Foo
是否不是条的函数:
shared void test(Foo foo) {
if (!is bar foo) {
}
}
我得到了错误
incorrect syntax: no viable alternative at token 'bar'
因为bar
是一个枚举实例,所以它只是一个值,而不是一个类型。但是它确实有一个比Foo
更具体的类型,您可以通过在它前面加\I
来表示它
void test(Foo foo) {
if (!is \Ibar foo) {
print("Not bar!");
}
}
因为bar
是一个枚举实例,所以它只是一个值,而不是一个类型。但是它确实有一个比Foo
更具体的类型,您可以通过在它前面加\I
来表示它
void test(Foo foo) {
if (!is \Ibar foo) {
print("Not bar!");
}
}
@gdejohn的回答是正确的,但我还要指出,直接引用枚举实例的类型通常没有多大意义。通常您会这样编写代码:
void test(Foo foo) {
if (foo!=bar) {
print("Not bar!");
}
}
@gdejohn的回答是正确的,但我还要指出,直接引用枚举实例的类型通常没有多大意义。通常您会这样编写代码:
void test(Foo foo) {
if (foo!=bar) {
print("Not bar!");
}
}
同意你通常不想缩小字体。如果bar
或baz
声明了您想要使用的新属性或方法,那么这样做是有意义的。还有一个更有趣的用例:您想要将选项集缩小到实例的子集,例如,类似于:\Ioption1 |\Ioption4 |\Ioption5
的类型。同意您通常不想缩小类型。如果bar
或baz
声明了您想要使用的新属性或方法,那么这样做是有意义的。还有一个更有趣的用例:您想要将选项集缩小到实例的子集,例如,类似于:\Ioption1\Ioption4\Ioption5
的类型。