【发布时间】:2016-12-30 16:11:14
【问题描述】:
Go 有 autovivification 吗?
正如@JimB 正确注意到的那样,我的定义并不那么严格。关于我的目标:在 Python 中,我们有一个非常优雅的 “仿真” 用于自动生存:
class Path(dict):
def __missing__(self, key):
value = self[key] = type(self)()
return value
Go 有类似的解决方案吗?
【问题讨论】:
-
Go 是静态类型和编译的。你不能真的有一个“未定义的引用”,如果有一个不应该有的 nil 引用,那是你的程序中的一个错误。
-
这也适用于 C++,并且有可能。我错了吗?
-
我想这取决于你的定义。我不会将 C++ 可以执行的定义称为“自动激活”,它只是在比较或模拟行为时列出。如果键不存在,Go 也可以从映射中返回零值,但仍需要定义值。
-
谢谢,很好。我只是喜欢
class Tree(dict): def __missing__(self, key)...的 Python 方式,我认为有一些类似的优雅解决方案。我扩展了我的问题。
标签: go autovivification