Nim:' readChar已弃用'。用什么代替?

时间:2018-01-10 11:26:32

标签: nim

我按照本指南从Nim开始写一个brainfuck解释器:[http://howistart.org/posts/nim/1/][1]

一切正常,但编译包含警告:

  

错误:不推荐使用readChar

谷歌搜索该消息(在引号中)没有给我打击。是否有替代readChar? 如果没有,相同功能的最简单替代是什么? (最好来自标准的lib)。

它使用的代码是:

proc run(skip = false): bool =
  while tapePos >= 0 and codePos < code.len:
    if tapePos >= tape.len:
      tape.add '\0'

    if code[codePos] == '[':
      inc codePos
      let oldPos = codePos
      while run(tape[tapePos] == '\0'):
        codePos = oldPos
    elif code[codePos] == ']':
      return tape[tapePos] != '\0'
    elif not skip:
      case code[codePos]
      of '+': inc tape[tapePos]
      of '-': dec tape[tapePos]
      of '>': inc tapePos
      of '<': dec tapePos
      of '.': stdout.write tape[tapePos]
      of ',': tape[tapePos] = stdin.readChar
      else: discard

    inc codePos

2 个答案:

答案 0 :(得分:1)

以下是如何使用readChars来实现相同的语义(未经测试但应该有效):

proc run(skip = false): bool =
  while tapePos >= 0 and codePos < code.len:
    if tapePos >= tape.len:
      tape.add '\0'

    if code[codePos] == '[':
      inc codePos
      let oldPos = codePos
      while run(tape[tapePos] == '\0'):
        codePos = oldPos
    elif code[codePos] == ']':
      return tape[tapePos] != '\0'
    elif not skip:
      case code[codePos]
      of '+': inc tape[tapePos]
      of '-': dec tape[tapePos]
      of '>': inc tapePos
      of '<': dec tapePos
      of '.': stdout.write tape[tapePos]
      of ',': discard stdin.readChars(tape, tapePos, 1)
      else: discard

    inc codePos

有关不推荐使用此内容的背景信息,请参阅我的评论here

答案 1 :(得分:0)

Nim文档建议使用readBuffer。

  

proc readBuffer(f:File; buffer:pointer; len:Natural):int {..}
  将len个字节读入缓冲区指向的缓冲区。返回   已读取的实际字节数可能小于len   (如果没有剩余的字节数),但不能更大。