我不明白下面代码的第二行,因为第一行中的“obj = nil”。给出的第二行似乎是“obj”总是变为nil,返回false和params [: id] .to_i将被放入id_num。你能告诉我为什么这样写吗?
☆application_controller
def me? obj = nil
id_num = obj !=nil ? obj.member_id : params[:id].to_i
if session[:user_id] == id_num then
return true
else
return false
end
end
答案 0 :(得分:1)
第一行中的obj = nil
仅表示obj参数的默认值为nil。这意味着如果不使用任何参数调用该方法,则obj将设置为nil。那么我呢?方法可以带0或1个参数。
答案 1 :(得分:1)
声明参数设置为nil
的方法意味着参数可选。
def output_object_or_say_duck(obj=nil)
if obj
puts obj
else
puts 'Duck'
end
end
作为设计模式的可选参数的一个很好的例子是您希望在必要时可以自定义的默认行为。 Web请求就是一个很好的例子。
def make_web_request(website, parameters={}) # parameters OR empty hash
Net::HTTP.get("#{website}?#{ parameters.to_query }")
end
这行代码:
id_num = obj !=nil ? obj.member_id : params[:id].to_i
是ternary operator,表示如果对象存在,请将id_num
分配给member_id
的{{1}}属性,否则使用obj
({{1}转换为整数)。