Ленивая инициализация в Пони - PullRequest
0 голосов
/ 16 октября 2018

Вот что я хотел бы сделать

# 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 голосов
/ 21 октября 2018

Пони не имеет встроенного типа опции.Вместо этого вы можете написать тип суммы (…. | 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 использует […] вокруг аргументов типа, а не в скобках.

...