【问题标题】:def and initializing. what is "obj"?def 和初始化。什么是“对象”?
【发布时间】:2013-12-06 02:04:59
【问题描述】:

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

【问题讨论】:

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


    【解决方案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 分配给objmember_id 属性,否则使用param[:id].to_i.to_i 转换为整数)。

    【讨论】:

    • 非常感谢。现在我明白 obj 是一个参数。但是,我仍然不知道“obj.member_id”是什么意思,因为它被用作实例(变量),尽管教科书上的示例代码中没有关于 obj 的定义。
    【解决方案2】:

    第一行的obj = nil简单的表示obj参数的默认值为nil。这意味着如果您不使用任何参数调用该方法,则 obj 将被设置为 nil。那么我呢?方法可以接受 0 或 1 个参数。

    【讨论】:

    • 非常感谢。现在我明白 obj 是一个参数。但是,我仍然不知道“obj.member_id”是什么意思,因为它被用作实例(变量),尽管我的教科书上的示例代码中没有关于 obj 的定义。
    猜你喜欢
    • 2010-09-10
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2012-01-28
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多