Pony 构造函数如何工作?
How do Pony constructors work?
看起来 Pony language 还没有在堆栈溢出方面取得很多进展,但你必须从某个地方开始......
Here's 关于 Pony 构造函数的信息非常有限,这无法帮助我理解我所看到的内容。
这是一个初始程序:
class Wombat
let name: String
var _hunger_level: U64
new anon() =>
name = "Anon"
_hunger_level = 0
new create(name': String) =>
name = name'
_hunger_level = 0
new hungry(name': String, hunger': U64) =>
name = name'
_hunger_level = hunger'
actor Main
new create(env: Env) =>
env.out.print("Started.")
let wombat: Wombat = Wombat("Ernie")
let w: Wombat = createWombat()
env.out.print("Name: "+wombat.name)
env.out.print("Name: "+w.name)
fun createWombat(): Wombat =>
let w: Wombat = Wombat("Bert")
w
让我们将 "create" 构造函数重命名为 "named":
new named(name': String) =>
name = name'
_hunger_level = 0
... 我看到错误:
Error:
/src/main/main.pony:22:26: couldn't find 'create' in 'Wombat'
let wombat: Wombat = Wombat("Ernie")
... 这表明并非所有构造函数都生而平等。咦...?
所以,让我们撤消该更改。
现在让我们尝试使用零参数构造函数:
let wombat: Wombat = Wombat()
let w: Wombat = createWombat()
...现在我看到了:
Error:
/src/main/main.pony:22:33: not enough arguments
let wombat: Wombat = Wombat()
^
它忽略了那个构造函数。
那么,让我们重命名前两个构造函数:
new create() =>
name = "Anon"
_hunger_level = 0
new named(name': String) =>
name = name'
_hunger_level = 0
...现在我看到了:
Error:
/src/main/main.pony:22:26: couldn't find 'apply' in 'Wombat'
let wombat: Wombat = Wombat()
不知道那是什么意思。
感谢 Pony 邮件列表中的 Chris Double。
答案在 Syntactic Sugar 文档中。我们只需要指定我们是哪些构造函数 运行。所以我将匿名实例化更改为:
let wombat: Wombat = Wombat.anon()
看起来 Pony language 还没有在堆栈溢出方面取得很多进展,但你必须从某个地方开始......
Here's 关于 Pony 构造函数的信息非常有限,这无法帮助我理解我所看到的内容。
这是一个初始程序:
class Wombat
let name: String
var _hunger_level: U64
new anon() =>
name = "Anon"
_hunger_level = 0
new create(name': String) =>
name = name'
_hunger_level = 0
new hungry(name': String, hunger': U64) =>
name = name'
_hunger_level = hunger'
actor Main
new create(env: Env) =>
env.out.print("Started.")
let wombat: Wombat = Wombat("Ernie")
let w: Wombat = createWombat()
env.out.print("Name: "+wombat.name)
env.out.print("Name: "+w.name)
fun createWombat(): Wombat =>
let w: Wombat = Wombat("Bert")
w
让我们将 "create" 构造函数重命名为 "named":
new named(name': String) =>
name = name'
_hunger_level = 0
... 我看到错误:
Error:
/src/main/main.pony:22:26: couldn't find 'create' in 'Wombat'
let wombat: Wombat = Wombat("Ernie")
... 这表明并非所有构造函数都生而平等。咦...?
所以,让我们撤消该更改。
现在让我们尝试使用零参数构造函数:
let wombat: Wombat = Wombat()
let w: Wombat = createWombat()
...现在我看到了:
Error:
/src/main/main.pony:22:33: not enough arguments
let wombat: Wombat = Wombat()
^
它忽略了那个构造函数。
那么,让我们重命名前两个构造函数:
new create() =>
name = "Anon"
_hunger_level = 0
new named(name': String) =>
name = name'
_hunger_level = 0
...现在我看到了:
Error:
/src/main/main.pony:22:26: couldn't find 'apply' in 'Wombat'
let wombat: Wombat = Wombat()
不知道那是什么意思。
感谢 Pony 邮件列表中的 Chris Double。
答案在 Syntactic Sugar 文档中。我们只需要指定我们是哪些构造函数 运行。所以我将匿名实例化更改为:
let wombat: Wombat = Wombat.anon()