Ruby 1.9.2中“|| =”做了什么?

params[:user][:role_ids] ||= [] 

它有什么作用?

ruby -v = 1.9.2p290

如果params["user][:role_ids]nil 或其他假值,它会将[]分配给params["user][:role_ids]

否则,它保留params["user][:role_ids]的原始值

 variable = nil variable ||= "string" puts variable # "string" variable2 = "value" variable2 ||= "string" puts variable2 # "value" 

如果params[:user][:role_ids]nil ,则会使用[]初始化,否则params[:user][:role_ids]进一步保持其值

如果尚未指定左侧值,请将其指定给右侧值。 如果已分配,请将其保留为自身。 可以在Michael Hartl的RoR教程网站上找到一个很好的解释。

它是memoize运算符,它执行以下两项操作之一:

  1. 如果它左边的值不是nil,它只返回值
  2. 如果它左边的值是nil(或未定义),则设置它。

这是Ruby中的条件赋值 。 您可以在这里阅读更多相关信息: Ruby Operators

如果尚未设置变量,它会为变量设置一个值。 含义

 class Something attr_accessor :some_value def perform_action @some_value ||= "Mom" puts @some_value end foo = Something.new foo.perform_action -> "Mom" foo.some_value = "Dad" foo.perform_action -> "Dad"