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"
刚刚被一条不清楚的指令绊倒了:
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"