关于 ruby 哈希的恼人问题
An irritating Issue about ruby hashes
为什么 ruby 有时会将散列解释为代码块?
例如,我有一个名为 'required' 的函数,它接受一个散列,所以我这样做:
required { base_uri: String, endpoints: String, destination: String, credentials: Hash}
它认为它是一个代码块和 unexpected tSYMBEG
的错误。
解决这个问题的唯一方法是用括号括起来,这样它就变成了:
required({ base_uri: String, endpoints: String, destination: String, credentials: Hash})
然后它开始将其作为哈希读取(就像我希望的那样)。
我不介意在哈希周围加上方括号,令人恼火的是它不一致,有时行得通,有时行不通。
怎么回事?
如果省略了方法调用的括号,则也必须省略散列周围的大括号。
没有不一致。 Ruby 只需使用相同的符号 {}
来分隔代码块和作为哈希构造函数运算符。
如果作为 proc/method 参数出现,它们总是 被视为一个块。因此,您需要在括号中放置一个散列参数以区分块或直接传递散列元素,如@Aetherus 已经提到的那样。
非常一致,如果你问我的话。
您选择了最不常用的一种方式。在这种情况下最常见的是省略两种标点符号:
required base_uri: String, endpoints: String, destination: String, credentials: Hash
在那之后,下一个常见的方法就是只用括号:
required(base_uri: String, endpoints: String, destination: String, credentials: Hash)
之后,同时使用:(如果您在散列后有参数,这也是必需的)
required({ base_uri: String, endpoints: String, destination: String, credentials: Hash})
为什么 ruby 有时会将散列解释为代码块?
例如,我有一个名为 'required' 的函数,它接受一个散列,所以我这样做:
required { base_uri: String, endpoints: String, destination: String, credentials: Hash}
它认为它是一个代码块和 unexpected tSYMBEG
的错误。
解决这个问题的唯一方法是用括号括起来,这样它就变成了:
required({ base_uri: String, endpoints: String, destination: String, credentials: Hash})
然后它开始将其作为哈希读取(就像我希望的那样)。
我不介意在哈希周围加上方括号,令人恼火的是它不一致,有时行得通,有时行不通。
怎么回事?
如果省略了方法调用的括号,则也必须省略散列周围的大括号。
没有不一致。 Ruby 只需使用相同的符号 {}
来分隔代码块和作为哈希构造函数运算符。
如果作为 proc/method 参数出现,它们总是 被视为一个块。因此,您需要在括号中放置一个散列参数以区分块或直接传递散列元素,如@Aetherus 已经提到的那样。
非常一致,如果你问我的话。
您选择了最不常用的一种方式。在这种情况下最常见的是省略两种标点符号:
required base_uri: String, endpoints: String, destination: String, credentials: Hash
在那之后,下一个常见的方法就是只用括号:
required(base_uri: String, endpoints: String, destination: String, credentials: Hash)
之后,同时使用:(如果您在散列后有参数,这也是必需的)
required({ base_uri: String, endpoints: String, destination: String, credentials: Hash})