关于红宝石哈希的一个令人恼火的问题

The*_*tix 2 ruby syntax hash

为什么ruby有时会将哈希解释为代码块?

例如,我有一个名为'required'的函数,它接受一个哈希,所以我这样做:

required { base_uri: String, endpoints: String, destination: String, credentials: Hash}
Run Code Online (Sandbox Code Playgroud)

它认为它是一块代码和错误unexpected tSYMBEG.

修复此问题的唯一方法是在其周围放置括号,使其显示为:

required({ base_uri: String, endpoints: String, destination: String, credentials: Hash})
Run Code Online (Sandbox Code Playgroud)

然后它开始将其作为哈希读取(就像我想要的那样).

我并不担心在哈希周围放置括号,令人恼火的是它不一致,有时候会有效,有时则不然.

这是怎么回事?

Aet*_*rus 5

如果省略了方法调用的括号,则必须省略散列周围的花括号.