【问题标题】:Why are Ruby hashes called hashes, and not maps, dicts, tables or associatve arrays?为什么 Ruby 哈希称为哈希,而不是映射、字典、表或关联数组?
【发布时间】:2014-08-09 04:44:18
【问题描述】:

在 Ruby 中,有一个名为 Hash 的内置类。根据the docs

哈希是一个类似于字典的唯一键及其值的集合。也称为关联数组,它们与数组类似,但在数组使用整数作为索引的情况下,哈希允许您使用任何对象类型。

...

可以通过使用其隐式形式轻松创建哈希:

grades = { "Jane Doe" => 10, "Jim Doe" => 6 }

所以基本上,他们是associative arrays。如果是这样,那么为什么它们被称为哈希?在计算机科学中,术语“哈希”不是通常用来指代通过hash function 运行某些数据而生成的某种数字或十六进制字符串吗?事实上,Ruby 对象甚至有一个名为 hash 的方法,它“为这个对象生成一个 Fixnum 哈希值”。

我知道 Ruby 中的 Hash 是作为 hash table 实现的,但鉴于我上面所说的,使用名称 Hash 而不是 Table 之类的名称似乎没有足够的理由或Map,特别是考虑到Ruby 似乎没有associative arrays 的任何其他内置实现。为什么选择这个名字?

【问题讨论】:

    标签: ruby language-design


    【解决方案1】:

    Ruby 从 Perl 中汲取了大量灵感,Perl 称其为哈希。

    更新:

    由 Ruby 的创建者 Yukihiro Matsumoto 确认:https://twitter.com/yukihiro_matz/status/547516495249428480

    【讨论】:

    • 嗯,所以也许是出于历史原因。不过这个答案引出了一个问题:为什么 Perl 选择术语“哈希”而不是“map”、“dict”、“table”或“associative array”?
    • 您可能会得到一个很好的答案。但它引出了一个问题……为什么 Perl 称它为哈希?
    • 我找不到权威来源,但共识似乎是 Perl 中的关联数组最终主要被称为散列,因为它们在内部使用散列,而“散列”明显更短且更容易比“关联数组”说/写。
    • @AndrewMedico 如果你还记得它们,你能把你找到的任何来源发布吗?
    • @Ajedi32,因为这是您可能得到的最佳答案,请您将其标记为答案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-05
    • 2010-09-13
    相关资源
    最近更新 更多