【发布时间】:2015-12-08 10:19:58
【问题描述】:
Fantom 编程语言的一个强大功能是it-block constructor,经常用于可序列化的类中。不幸的是,我找不到足够详细的文档来做我认为应该很简单的事情:扩展一个声明这种类型的构造函数的类。到目前为止,我发现的最好的文档位于 this post,但没有显示我正在尝试做的示例。
假设我有这些课程:
class Animal {
protected const Str name
new make( |This| f ) { f(this) }
override Str toStr() { "I'm an Animal and my name is $name" }
}
class Main {
Void main() {
a := Animal {
name = "Flipper"
}
echo( a )
}
}
到目前为止一切顺利,它打印出:“我是动物,我的名字是鳍状肢”。现在我想用这个类来扩展 Animal:
class Dog : Animal {
override Str toStr() { "I'm an Dog and my name is $name" }
}
但是 Fantom 编译器说:
Must call super class constructor in 'make'
所以我把班级改成:
class Dog : Animal {
new make( |This| f ) : super( this ) { f(this) }
override Str toStr() { "I'm an Dog and my name is $name" }
}
但现在编译器抱怨:
invalid args make(|Playground::Animal->sys::Void|), not (Playground::Dog)
这是有道理的,因为我传递的是 Dog 实例,而不是 Animal,那么我应该将什么传递给超级构造函数?
【问题讨论】:
标签: fantom