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)
将所有可选参数放在函数末尾通常是一种很好的做法,以避免按照这样的函数调用所需的心理体操.