"||=" 在 Ruby 1.9.2 中有啥作用? [复制]

Posted

技术标签:

【中文标题】"||=" 在 Ruby 1.9.2 中有啥作用? [复制]【英文标题】:What does "||=" do in Ruby 1.9.2? [duplicate]"||=" 在 Ruby 1.9.2 中有什么作用? [复制] 【发布时间】:2011-12-04 14:45:03 【问题描述】:
params[:user][:role_ids] ||= []

它有什么作用?

ruby -v = 1.9.2p290

【问题讨论】:

重复:What does ||= mean in Ruby?,What does ||= mean in Ruby?,what is ||= in ruby?,Double Pipe Symbols in Ruby Variable Assignment?,What does the “||=” operand stand for in ruby,what does a ||= mean in Ruby language?,Is the ruby operator ||= intelligent?,... …What does ||= mean?,可能还有很多其他人。另见The definitive list of ||= (OR Equal) threads and pages。 不要问重复的问题。它只是将信息分散在站点周围,这些信息最好在一个地方找到。谢谢! @JörgWMittag:为什么要告诉 393 代表用户不要问重复的问题,而不是告诉 4 个拥有超过 3K 代表(因此拥有接近权限)的人不要回答重复的问题? 【参考方案1】:

如果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"

【讨论】:

【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

它是 memoize 操作符,它做以下两件事之一:

    如果左边的值不为nil,则直接返回值 如果左侧的值为 nil(或未定义),则设置它。

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

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

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"

【讨论】:

以上是关于"||=" 在 Ruby 1.9.2 中有啥作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Ruby:如何在Ruby块中使用Merge方法

ruby中愚蠢的哈希更新实验

在 Ruby 中使用 ("C") 指令打包成字节字符串

如何在数组 ruby​​ 中添加元素?

Ruby 哈希中的 : 和 "" 有啥区别?

如何在 ruby​​ 中读取没有 quote_char 的 CSV?