【问题标题】:Use case for `&&=``&&=` 的用例
【发布时间】:2013-04-06 01:02:29
【问题描述】:

我在Ruby代码中看到并使用过很多||=,但在实际应用中我几乎从未见过或使用过&&=。 &&= 有用例吗?

【问题讨论】:

  • 希望Object#andand对你有所帮助。
  • 你今天正处于用例时代,不是吗?
  • @Jueecy.new 不要这样说他。他可能正在思考这个话题,让他思考。但不要侮辱他。认真思考总是一个好主意。
  • name &&= name.strip 作为一个有效的用例怎么样?如果名称不是nil,则只想去除字符串的空格并将其重新分配给名称。
  • 刚找到this short post on guarded assignments in Ruby,我前段时间又读了一遍,你可能会感兴趣。

标签: ruby syntactic-sugar


【解决方案1】:

不要花言巧语,但显而易见的用例是任何时候你会说x && foo 并希望将结果存储回x。这是一个:

list = [[:foo,1],[:bar,2]]
result = list.find{ |e| e.first == term }
result &&= result.last  # nil or the value part of the found tuple

【讨论】:

  • 这看起来也很有趣。
【解决方案2】:

您希望确保对所有元素的布尔条件的评估对所有元素都返回 true 的任何类型的迭代。

例如

 result = true
 array.each do |elem|
   # ...

   result &&= condition(elem)   # boolean condition based on element value
 end
 # result is true only if all elements return true for the given condition

【讨论】:

    【解决方案3】:

    验证文件,例如,

    a = {'a' => ['string',123]}
    

    a['a'] 中的元素应该是String。为了验证它们,我认为您可以使用,

    def validate(doc, type)
      valid = true
      doc.each{|x|
        valid &&= x.is_a? type
      }
      valid    
    end
    
    1.9.3p392 :010 >   validate(a['a'],String) => false
    

    【讨论】:

    • 如果有更好的成语,这不是一个真正的用例:) doc.all? { |x| x.is_a? type }
    • @dbenhur 是的。确实如此。我认为我在这里试图说明的一点是&&= 可以与||= 以相反的方式使用。如果需要,我们想禁用一些标志或值。 :) 如果我在这里不正确,请纠正我。
    猜你喜欢
    • 1970-01-01
    • 2022-11-09
    • 2021-10-18
    • 2019-06-17
    • 2013-11-09
    • 2011-12-25
    • 2012-04-25
    • 2019-12-12
    • 2015-06-17
    相关资源
    最近更新 更多