Ruby 双管道分配

Ruby Double Pipes Assignment

刚刚被一条不清楚的指令绊倒了:

a = 5 || 3                       # ==> 5
verdict = true || false          # ==> true

既然||or一样,那么and/or为什么要用这个语句呢?除了始终选择第一个选项之外,它并没有真正展示任何决策。

我知道 ||= 作业,但这是不同的。寻求有关 || 的上述用法的说明。

a = b || c

这条语句的作用是,它告诉Ruby“将b的值赋给a,除非b是假的,如果b为假,将c的值赋给a。如果 b 不是假的,c 语句将不会被执行。

一个你可以使用它的好例子是,如果你从某个地方得到一个变量,但你不确定它是否会是 nil,所以你创建一个像 c 这样的变量第二个选项。

例如,如果您有一个将散列作为参数的方法,并且您想要 return 具有键 'b' 的散列中元素的值,例如,但是散列参数不会总是有一个 'b' 键,所以你可以这样写

def value_of_b(hash)
  b_val = hash['b'] || 'unknown'
  puts "The value of b is :#{b_val}"
end

h = {'a' => 1, 'b' => 2}

value_of_b(h)
#=>The value of b is :2

m = {'a' => 1}

value_of_b(m)
#=>The value of b is :unknown

我想到的另一个例子是访问一个不存在的数组元素

[1,2,3][3] || "default"
#=> "default"

或者为 Rails params hash 设置默认值:

@name = params[:name] || "no name provided"