创建一个ruby哈希,在键中使用特殊字符,新语法

创建一个ruby哈希,在键中使用特殊字符,新语法,ruby,Ruby,新的ruby语法允许: states = { Oregon: 'OR', Florida: 'FL', California: 'CA', } 我如何添加以下内容: states = { New York: 'NY' } 如果我尝试New\York:或'newyork':您不能使用该语法,则会出现错误。这样做: states = { :"New York" => "NY" } 或 这不能在新语法中完成 遗憾的是,Ruby的形式语法没有在任何地方记录,但显示解析器需

新的ruby语法允许:

states = {
  Oregon: 'OR',
  Florida: 'FL',
  California: 'CA',
}
我如何添加以下内容:

states = {
  New York: 'NY'
}

如果我尝试
New\York:
'newyork':

您不能使用该语法,则会出现错误。这样做:

states = {
  :"New York" => "NY"
}


这不能在新语法中完成


遗憾的是,Ruby的形式语法没有在任何地方记录,但显示解析器需要一个
tLABEL
,这意味着新语法中的键必须遵循与Ruby标识符相同的规则。

您可以按相反的顺序定义它,然后应用将其翻转回来:

states = {
  OR: :"Oregon",
  FL: :"Florida",
  CA: :"California",
  NY: :"New York"
}.invert
它具有符号键和值,但您始终可以根据需要将值转换为字符串


“新样式”散列声明在您可以定义的键的种类上非常有限,除非您使用更正式的样式,如
:“newyork”=>“…”

您必须修改ruby解释器以满足操作需求。旧的语法很好,我只是想可能有一种内置的方法。Ruby标识符由字母表、十进制数字和下划线字符组成,并以字母表(包括下划线)开头——我不清楚这一点,所以我会立即将其发布给其他人。你所说的
:“纽约”:
?对我来说这看起来是无效的。@sawa啊,你说得对。我想那应该是
:“纽约”=>…
states = {
  OR: :"Oregon",
  FL: :"Florida",
  CA: :"California",
  NY: :"New York"
}.invert