小马中的延迟初始化

时间:2018-10-16 04:02:03

标签: ponylang

这就是我想要做的

# Ruby
class Foo
  def bar
    @bar ||= []
  end
end

这就是我要开始的:

 // Pony pseudocode
 class Foo
   var _bar: Optional(Array(I32))
   fun ref bar(): Array(I32) ref =>
     if _bar == None then
       _bar = Some([])
     end
     _bar.unbox()

1 个答案:

答案 0 :(得分:3)

Pony没有内置的选项类型。相反,您可以编写总和类型(…. | None),并用None替代。模式匹配可用于根据其类型恢复备选方案:

class Foo
  var _bar: (Array[I32] ref | None) = None
  fun ref bar(): Array[I32] ref =>
    match _bar
      | let bar': Array[I32] => bar'
      | None =>
        let bar'' = Array[I32]
        _bar = bar''
        bar''
    end

请注意,Pony在类型参数而不是括号周围使用[…]