def和初始化。什么是“obj”?

时间:2013-12-04 04:25:06

标签: ruby-on-rails ruby-on-rails-3

我不明白下面代码的第二行,因为第一行中的“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

2 个答案:

答案 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}转换为整数)。

相关问题