1

由于缺少 Ponylang 中有关集合的文档和教程,我在使用 Array 类和使用索引方面真的很吃力。

我有一个过度设计的基于演员的 fizzbuzz,其中有一个演员负责向其他演员请求 fizzbuzz 操作并收集结果。可能我使用的模式不是最好的,但现在我想以这种方式迭代以了解更多信息。

我的问题是以下代码:

actor FizzBuzzer
    var _results:Array[String] 
    let _main: Main tag


fun list_to_string(l:List[String]):String=>
   l.fold[String]({(a:String,b:String)=>a+"\n"+b},"")

new create(n:String, main:Main tag)=>

  let num:USize = try (consume n).usize()? else 0 end
  _main = main
  _results = recover Array[String] end
  try

    let result = this.fizzbuzz(num)?
    let message:String = list_to_string(result)
    main.print(message)
  else
    main.print("Invalid argument: "+ num.string())
  end

fun fizzbuzz(n:USize,  acc:List[String]=List[String]()):List[String] ?=>
  if n <=0 then error end

  let res = List[String]()
  for i in Range[USize](1,n+1) do
     FizzBuzzerino.process(i,this)
  end
  res 

be collect_result(result:String,num:USize)=>
     try
        _results.insert(num,result)?
      else
        _main.print("Error processing element: "+num.string())
      end
     `

在函数collect_result中插入总是失败。使用update是一样的。我从处理参与者那里收到的resultnum我是正确的,但我无法将它们插入到数组中。在此类中的 Array 中的任何插入都会失败。是能力问题吗?还是我做错了什么?

4

0 回答 0