【发布时间】:2020-09-17 10:00:18
【问题描述】:
当我们在 Ruby 中定义 Hash 时,我们可以使用几种语法:
# IRB Ruby 2.7.1 - Defining a Hash
my_hash = { 'string_transformed_into_symbol_1': 'value',
"string_transformed_into_symbol_2": 'value',
'string_1' => 'value',
"string_2" => 'value',
symbol_1: 'value',
:symbol_2 => 'value' }
我在想箭头 => 来自 Ruby 1.8,并被冒号 : 取代。但是,从上面的示例中,我们可以看到它不仅仅是一个语法糖:: 将一个键 String 转换为 Symbol:
# IRB Ruby 2.7.1 - Outputing a Hash
my_hash
=> { :string_transformed_into_symbol_1 => "value",
:string_transformed_into_symbol_2 => "value",
"string_1" => "value",
"string_2" => "value",
:symbol_1 => "value",
:symbol_2 => "value" }
来自this question,mu is too short 的精彩回答说:
JavaScript 样式 (
key: value) 仅在您的所有哈希键都是“简单”符号(或多或少与/\A[a-z_]\w*\z/i匹配的符号)时才有用 [...] 但是,如果您的密钥不是符号,您仍然需要 hashrocket。
这让我将: 和=> 视为方法(但我知道我错了)。但是,我在文档中找不到任何关于它的内容。
问:: 和=> 究竟是什么?我怎样才能了解更多关于它们的信息,以及它们在 Ruby 的源代码中定义在哪里?
【问题讨论】:
-
Literals > Hashes 解释哈希字面量的语法。
-
它们是词法分析器/解析器使用的标记。我在下面提供了更多detailed explanation。