Al_*_*Al_ 3 ruby methods function syntax-error
为什么这个功能无效?
def request(method='get',resource, meta={}, strip=true)
end
Run Code Online (Sandbox Code Playgroud)
未经预料的')'期待keyword_end
谢谢!
在Ruby中,您不能使用可选参数包围所需参数.运用
def request(resource, method='get', strip=true, meta={})
end
Run Code Online (Sandbox Code Playgroud)
将解决问题.
作为思想实验,考虑原始功能
def request(method='get',resource, meta={}, strip=true)
end
Run Code Online (Sandbox Code Playgroud)
如果我认为这种方法request(object),所需的行为是相当明显的-调用该方法object的resource参数.但如果我称之为呢request('post', object)?Ruby需要理解语义,method以决定'post'是method或是resource,是否object是resource或者meta.这超出了Ruby的解析器的范围,因此它只会抛出无效的函数错误.
一些额外的提示:
我还会将meta参数放在最后,这允许您在没有花括号的情况下传递哈希选项,例如:
request(object, 'get', true, foo: 'bar', bing: 'bang')
Run Code Online (Sandbox Code Playgroud)
正如Andy Hayden在评论中指出的那样,以下功能有效:
def f(aa, a='get', b, c); end
Run Code Online (Sandbox Code Playgroud)
将所有可选参数放在函数末尾通常是一种很好的做法,以避免按照这样的函数调用所需的心理体操.
| 归档时间: |
|
| 查看次数: |
173 次 |
| 最近记录: |