从表中获取密钥在编译时未知

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从表中获取密钥在编译时未知相关的知识,希望对你有一定的参考价值。

我试图从表中获取值,而不知道它是否在编译时包含给定的键。

proc getFirst(table: Table[int, string]): string =
  return table[0]

var t = initTable[int, string]()
t.add(0, "I like turtles")

echo t[0]                        # works!
echo t.getFirst()                # works!    

echo t[1]                        # Error: unhandled exception: key not found: 1 [KeyError]

const str: string = t.getFirst() # Error: cannot evaluate at compile time: t
echo str                         

echo t[0]echo t[1]正如我预期的那样工作。

echo t.getFirst()让我有点困惑。我想编译器能够推断出密钥存在。如果我错了,请纠正我。

const str: string = t.getFirst()根本不起作用。即使通过编辑proc来检查密钥是否存在,例如

proc getFirst(table: Table[int, string]): string =
  if table.hasKey(0):
    return table[0]
  else:
    return "I do not exist!"

将产生相同的编译器错误。有办法以这种方式获得桌子的钥匙吗?

答案

如果表为空,则访问索引表[0]将生成异常(“未找到键”)。我想你需要这样的东西:

import json,tables

proc get(table: Table[int, string]; index : int): string =
  if table.len() <= 0:
    result = "empty"
  else:
    if table.hasKey(index):
      return table[index]
    else:
      return "missing"

var t = initTable[int, string]()
t.add(0, "I like turtles")

echo t[0]      # works butgenerates exception if table is empty!
echo t.get(0)  # works even if table is empty or table[0] is missing

echo t.get(2)  # missing

for key,value in t.pairs():
  echo $key & " " & value

产量

我喜欢乌龟

我喜欢乌龟

失踪

我喜欢乌龟

以上是关于从表中获取密钥在编译时未知的主要内容,如果未能解决你的问题,请参考以下文章

Vue.js 为 v-for 获取未知的 Json 密钥

使用 laravel 模型获取数据时没有从表中获取结果

从表中选择数据并从另一个表中填充特定值

MySQL:PHP:由于警告,无法从表中获取数据

密钥未知时获取对象?

JOOQ 从表中获取列