为什么ruby有时会将哈希解释为代码块?
例如,我有一个名为'required'的函数,它接受哈希,所以我这样做:
unexpected tSYMBEG
它认为这是required({ base_uri: String, endpoints: String, destination: String, credentials: Hash})
的代码块和错误。
解决此问题的唯一方法是在其周围放置括号,使其显示为:
try { Something1(); }
catch { Something2(); }
然后开始将其作为哈希(就像我想要的那样)阅读。
我并不打算在哈希周围放置括号,令人恼火的是它不一致,有时候会有效,有时则不然。
发生了什么事?
答案 0 :(得分:5)
如果省略了方法调用的括号,则必须省略围绕哈希的花括号。
答案 1 :(得分:2)
您选择了最少使用的方式。在这种情况下最常见的是省略两种类型的标点符号:
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})
答案 2 :(得分:1)
没有不一致。 Ruby只使用相同的符号{}
来分隔代码块和Hash构造函数操作符。
如果显示为proc / method参数,则始终视为块。由于这个原因,你需要在parens中加入一个hash参数来区分block或直接传递哈希元素,就像@Aetherus已经提到的那样。
非常一致,如果你问我。