ruby中的函数无效

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

谢谢!

Kyl*_*yle 6

在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),所需的行为是相当明显的-调用该方法objectresource参数.但如果我称之为呢request('post', object)?Ruby需要理解语义,method以决定'post'method或是resource,是否objectresource或者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)

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