Dictionary 返回常量字典

Dictionary 返回常量字典,dictionary,constants,julia,Dictionary,Constants,Julia,在Julia中,假设我有一个返回字典的函数: function f() d = [i => 2i for i = 1:10] return d end 我想把这本词典作为常量归还。也就是说,不能添加或删除密钥,也不能重新分配现有密钥。是否可以修改f以使返回的字典为常量?Julia的标准库不提供不可变的关联类型。您可以自己实现这种类型,而不定义任何setindex它的方法。但是,不改变返回的字典可能更容易。虽然Julia的标准库中没有只读Dict(有未报告的Immutabl

在Julia中,假设我有一个返回字典的函数:

function f()
    d = [i => 2i for i = 1:10]
    return d
end

我想把这本词典作为常量归还。也就是说,不能添加或删除密钥,也不能重新分配现有密钥。是否可以修改
f
以使返回的字典为常量?

Julia的标准库不提供不可变的关联类型。您可以自己实现这种类型,而不定义任何
setindex它的方法。但是,不改变返回的字典可能更容易。

虽然Julia的标准库中没有只读Dict(有未报告的
ImmutableDict
,但它只防止删除,而不是设置),也没有在
数据结构.jl
包中,但它可以相当容易地作为一个包添加


只读Dict有许多优点,例如,可以生成一个完美的哈希函数,以便只需一个探测就可以找到(或不找到)条目。(描述了一个生成完美哈希的工具)。

你说字典是常量是什么意思?From:注意
const
只影响变量绑定;变量可能绑定到可变对象(如数组),并且该对象仍可能被修改。如果键的数量可能较大(在本例中可能如此),则CMPH可能是比gperf更好的选择:。它也是LGPL,而gperf是GPL。您可以在此处找到CMPH的用法示例:。如果有人对这个项目感兴趣,CHD算法工作得很好,而且很容易在纯Julia中实现。在这种情况下,我建议不要阅读CMPH源代码,并对生成的库使用MIT许可证。如果bam基于CMPH,那么也不应该阅读源代码(以避免以后出现许可问题),对吗?仅从自述文件来看,bam听起来很不错。如果在此之前没有完成,那么对于Julia GSoC 2017项目来说,使用CHD制作包可能是一个不错的主意?bam使用CMPH,它不是从CMPH派生的,因此bam源代码可以阅读或使用。