首页 > 解决方案 > 没有参数的 RAII 构造函数?

问题描述

为什么Class?当 no args 构造函数可能出错时表单无效,而 with args 表单有效?可能是尚未考虑的错误或粗糙边缘吗?

class A
  new create(x : I32) ? =>
    if (x % 2) == 0 then
      error
    end

class B
  new create() ? =>
    error
    
actor Main
  new create(env: Env) =>
    try
      let x = A(1)? // legal
      let y = B.create()? // why not `B?`? `B()?` seems to expand to `create().apply()?` 
    else
      env.out.print("exception")
    end

标签: ponylang

解决方案


这似乎是当前 Pony 的语法限制。对于完全零参数的构造函数调用,您将使用不带括号的类型名称,如下所示:

let y = B

对于部分调用,您希望可以使用它(仍然没有括号):

let y = B?

但这目前在语法上无效。这似乎是一个逻辑扩展(假设它在语法上不与其他任何内容冲突)。


推荐阅读