【问题标题】:Ruby Double Pipes Assignment红宝石双管作业
【发布时间】:2020-02-21 13:36:24
【问题描述】:

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

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

既然||or 相同,那么如何和/或为什么要使用这个语句?除了总是选择第一个选项之外,它并没有真正展示任何决策。

我知道||= 分配,但这是不同的。寻找有关|| 上述用法的说明。

【问题讨论】:

  • number = options[:number] || 42
  • 你是在哪里偶然发现这个例子的?像这样使用它没有任何意义。
  • @Rich_F @AlekseiMatiushkin 的例子实际上更有意义,因为options[:number] 可以是nil 并且使用number = options[:number] || 42 您确保分配options 哈希中的数字或@987654332 @ . nil || 42 #=> 42.
  • 是的,没错,它更像if true; else;

标签: ruby variable-assignment


【解决方案1】:
a = b || c

此语句的作用是,它告诉 Ruby '将 b 的值分配给 a,除非 b 是假的,如果 b 是假的,则将 c 的值分配给 @987654329 @。如果b 不是假的,c 语句将不会被执行。

你可以使用它的一个很好的例子是如果你从某个地方获取一个变量并且你不确定它是否会为零,所以你创建一个像c 这样的变量作为第二个选项。

例如,如果您有一个将散列作为参数的方法,并且您希望从散列中返回具有键 '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 参数哈希设置一个默认值:

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

【讨论】:

  • 好的,所以优先。我没有被falsey这个词绊倒。对于这样的事情,我通常会求助于ternary。您的 array 示例可能显示得最好。它有一个内置的条件。
  • 对不起,这是假的。这是一个错字。 Falsy 通常是用来描述变量的术语,它要么是 nil 要么是 false
  • @Viktor falsey(或falsy)用于描述在布尔表达式中被视为false的变量。在不同的语言中,它可能包含更多(如php 中的0""。)
  • @AlekseiMatiushkin 是的,这就是维克托的意思。所以条件是第一个值,第二个值是默认值。我没有遇到过这个。
  • 可能值得注意的是|| 是一个短路运算符,即仅当左侧为假时才计算右侧。
猜你喜欢
  • 2012-06-25
  • 2017-09-02
  • 2019-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
相关资源
最近更新 更多