gpt4 book ai didi

ponylang - 我不知道如何转换类型

转载 作者:行者123 更新时间:2023-12-02 18:59:47 24 4
gpt4 key购买 nike

helloworld 开始,我试图通过制作一个应用程序来学习一些小马,该应用程序会向用户回显他们输入的内容。这是有效的,除了我 _env.out.print(_buffer) 的一行。

class MyInput iso is StdinNotify
var _env: Env
var _buffer: Array[U8]

new iso create(env: Env) =>
_env = env
_buffer = Array[U8].create()

fun ref apply(data: Array[U8] iso) =>
for item in (consume data).values() do
if item == 0x0A then
_env.out.print(_buffer)
_buffer = Array[U8].create()
end
_buffer.push(item)
end

我得到的编译错误是:

argument not a subtype of parameter
_env.out.print(_buffer)
^
parameter type: ByteSeq val
be print(data: ByteSeq) =>
^
argument type: Array[U8 val] ref
_env.out.print(_buffer)

来自阅读 github 中的源代码我认为 Array[U8] 应该符合 ByteSeq 的条件,所以我猜这是功能问题。我尝试了一些方法,但似乎无法将 ref 数组复制到 val 数组中。我得到的最接近的是 let out: Array[U8] box = _buffer

最佳答案

感谢小马邮件列表和更多的尝试和错误,我已经让它工作了。 (感谢肖恩·艾伦)

actor Main
new create(env: Env) =>
env.out.print("welcome to the echo chamber")

var input = recover iso MyInput.create(env) end
env.input(consume input)

class MyInput is StdinNotify
var _env: Env
var _buffer: Array[U8] iso

new create(env: Env) =>
_env = env
_buffer = recover iso Array[U8].create() end

fun ref apply(data: Array[U8] iso) =>
for item in (consume data).values() do
if item == 0x0A then
let bufferOutIso = _buffer = recover iso Array[U8].create() end
_env.out.print(consume bufferOutIso)
else
_buffer.push(item)
end
end

因此,如果其中任何一个需要解释,

  • 事实证明,虽然 print 需要一个 val 参数,但它需要一个 iso,原因我不完全理解
  • 使用iso时,您需要了解recover block 和destructive read
  • 我在类定义中放入 iso 时犯了一个错误,我只需要在恢复 iso block 中创建实例

关于ponylang - 我不知道如何转换类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35589327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com