从表中获取密钥在编译时未知
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
产量
我喜欢乌龟
我喜欢乌龟
失踪
我喜欢乌龟
以上是关于从表中获取密钥在编译时未知的主要内容,如果未能解决你的问题,请参考以下文章