2

看起来Pony 语言还没有在堆栈溢出方面取得很多进展,但你必须从某个地方开始......

这是关于 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()

不知道那是什么意思。

4

1 回答 1

1

感谢 Pony 邮件列表上的 Chris Double。

答案在Syntactic Sugar文档中。我们只需要指定我们正在运行的构造函数。所以我将匿名实例化更改为:

let wombat: Wombat = Wombat.anon()
于 2016-12-04T19:10:10.527 回答