一个关于ruby哈希的恼人问题
为什么ruby有时会将哈希解释为代码块?
例如,我有一个名为’required’的函数,它接受一个哈希所以我做:
required { base_uri: String, endpoints: String, destination: String, credentials: Hash}
它认为它是一块代码和错误的unexpected tSYMBEG
。
修复此问题的唯一方法是在其周围放置括号,使其显示为:
required({ base_uri: String, endpoints: String, destination: String, credentials: Hash})
然后它开始将其作为哈希读取(就像我想要的那样)。
我并不打算在哈希周围放置括号,令人恼火的是它不一致,有时是有效的,有时则不然。
这是怎么回事?
如果省略了方法调用的括号,则必须省略围绕哈希的花括号。
你选择了最少使用的方法。 在这种情况下最常见的是省略两种类型的标点符号:
required base_uri: String, endpoints: String, destination: String, credentials: Hash
在那之后,下一个常见的方式就是parens:
required(base_uri: String, endpoints: String, destination: String, credentials: Hash)
在那之后,两者都有:(如果你在哈希之后有参数,那也是必要的)
required({ base_uri: String, endpoints: String, destination: String, credentials: Hash})
没有矛盾。 Ruby只使用相同的符号{}
来分隔代码块和Hash构造函数操作符。
如果显示为proc / method参数,则始终将它们视为块。 由于这个原因,你需要在parens中放入一个hash参数来区分block或直接传递哈希元素,就像已经提到的@Aetherus一样。
非常一致,如果你问我的话。