Ruby Lambda 在与 myfunc 一起使用时给出了未定义的方法。(someparam)
Ruby Lambda's giving an undefined method when used with myfunc.(someparam)
刚刚进入 Ruby 的世界,并建立了一个基于 Sinatra 的 API。
这是我的路线定义之一。 not_found 在调用为 ¬_found 时有效,但它给出 '2015-10-23 16:31:59 - NoMethodError - Sinatra::FileService::GetFiles:Module 的未定义方法“状态”:' 当调用为 ' not_found.(参数['obsId'])'.
有人可以提供任何指导吗?非常感谢!
def self.registered(app)
not_found = -> id = 'undefined' {
status 404
content_type :json
{
:message => settings.messages['get']['404'],
:data => {
id: _id
}
}.to_json
}
found = -> _id {
status 200
content_type :json
{
:message => settings.messages['get']['200'],
:data => {
:id => _id
}
}.to_json
}
app.get '/', ¬_found
app.get '/:obsId' do
if params['obsId'] == '1'
found.( params['obsId'] )
else
not_found.( params['obsId'] )
end
end
end
你是 运行宁 Ruby 1.8 吗? .()
语法当时不存在。您必须在 1.8 中使用以下两种表示法之一:
found[params['obsId']]
found.call(params['obsId'])
但是在 Ruby 1.8 中,定义 lambda 的 -> {}
语法也不存在。您可能 运行 会遇到更多错误,需要将您的 lambda 定义替换为
found = lambda do |id|
# ...
end
看来这是一个范围界定问题。似乎当您使用默认参数调用 lambda 时,它会保持外部范围。但是当你传入参数时,它会创建一个新的内部范围。
更新我对 found.call( params['obsId'], settings.messages['get']['200'] )
的调用解决了这个问题。
刚刚进入 Ruby 的世界,并建立了一个基于 Sinatra 的 API。
这是我的路线定义之一。 not_found 在调用为 ¬_found 时有效,但它给出 '2015-10-23 16:31:59 - NoMethodError - Sinatra::FileService::GetFiles:Module 的未定义方法“状态”:' 当调用为 ' not_found.(参数['obsId'])'.
有人可以提供任何指导吗?非常感谢!
def self.registered(app)
not_found = -> id = 'undefined' {
status 404
content_type :json
{
:message => settings.messages['get']['404'],
:data => {
id: _id
}
}.to_json
}
found = -> _id {
status 200
content_type :json
{
:message => settings.messages['get']['200'],
:data => {
:id => _id
}
}.to_json
}
app.get '/', ¬_found
app.get '/:obsId' do
if params['obsId'] == '1'
found.( params['obsId'] )
else
not_found.( params['obsId'] )
end
end
end
你是 运行宁 Ruby 1.8 吗? .()
语法当时不存在。您必须在 1.8 中使用以下两种表示法之一:
found[params['obsId']]
found.call(params['obsId'])
但是在 Ruby 1.8 中,定义 lambda 的 -> {}
语法也不存在。您可能 运行 会遇到更多错误,需要将您的 lambda 定义替换为
found = lambda do |id|
# ...
end
看来这是一个范围界定问题。似乎当您使用默认参数调用 lambda 时,它会保持外部范围。但是当你传入参数时,它会创建一个新的内部范围。
更新我对 found.call( params['obsId'], settings.messages['get']['200'] )
的调用解决了这个问题。