Ruby 中变量前的感叹号
Exclamation points before a variable in Ruby
通过 ruby 僧侣,他们偶尔会从左侧字段中抛出一个语法不熟悉的代码:
def compute(xyz)
return nil unless xyz
xyz.map {|a,b| !b.nil? ? a + b : a}
end
谁能解释一下这三种用途?
1)宾语前感叹
2) 额外的问号 3) lambda
中冒号的使用
宾语前感叹号:
!x 表示 x 的否定,如果 x 为真,则 !x 表示假,反之亦然
追加问号:
x ? y : z
表示如果x为真,则returny,否则returnz
lambda 中的冒号用法
我在上面2中解释过
!
只是一个非运算符。
b.nil?
是一种检查 b 的值是否为 nil 的方法。 Returns 一个布尔值。
!b.nil? ? a + b : a
是三元运算是action。它是这样工作的:
if_this_is_a_true_value ? then_the_result_is_this : else_it_is_this
相当于说
if a then b else c end
如果!b.nil?
是true
,那么与上面的陈述相关,答案是a+b
,否则是a
。
阅读更多here
1)
!
, negations - 它将除 nil
和 false
之外的每个对象都更改为 false(其他对象变为 true
)
2) name?
应该 return false(false
和 nil
) 或 true 值(其他一切)。在大多数情况下,它将是 true
或 false
个对象。
with ?
结尾的方法表明它们是谓词。在您的示例中 nil?
检查对象是否为零。在其他语言中,您可能会发现类似这样的内容:is_nil
.
其他示例:
[].empty? # true
3.zero? # false
0.zero? # true
3) 您示例中的冒号是 a ternary if 的一部分。
'cond' ? 'true value' : 'false value'
类似于:
if 'cond'
'true value'
else
'false value'
end
?:
和 if else
之间的一个区别是优先级:
def foo a
a # just return a
end
foo 2 ? 3 : 4
# => 3
foo if 2 then 3 else 4 end
# error
在最后一个示例中 Ruby 想要 运行 function1 if condition
但它找到了 function if condition #some garbage
,因此 Ruby 引发了错误。
通过 ruby 僧侣,他们偶尔会从左侧字段中抛出一个语法不熟悉的代码:
def compute(xyz)
return nil unless xyz
xyz.map {|a,b| !b.nil? ? a + b : a}
end
谁能解释一下这三种用途? 1)宾语前感叹 2) 额外的问号 3) lambda
中冒号的使用宾语前感叹号:
!x 表示 x 的否定,如果 x 为真,则 !x 表示假,反之亦然
追加问号:
x ? y : z
表示如果x为真,则returny,否则returnz
lambda 中的冒号用法
我在上面2中解释过
!
只是一个非运算符。
b.nil?
是一种检查 b 的值是否为 nil 的方法。 Returns 一个布尔值。
!b.nil? ? a + b : a
是三元运算是action。它是这样工作的:
if_this_is_a_true_value ? then_the_result_is_this : else_it_is_this
相当于说
if a then b else c end
如果!b.nil?
是true
,那么与上面的陈述相关,答案是a+b
,否则是a
。
阅读更多here
1)
!
, negations - 它将除 nil
和 false
之外的每个对象都更改为 false(其他对象变为 true
)
2) name?
应该 return false(false
和 nil
) 或 true 值(其他一切)。在大多数情况下,它将是 true
或 false
个对象。
with ?
结尾的方法表明它们是谓词。在您的示例中 nil?
检查对象是否为零。在其他语言中,您可能会发现类似这样的内容:is_nil
.
其他示例:
[].empty? # true
3.zero? # false
0.zero? # true
3) 您示例中的冒号是 a ternary if 的一部分。
'cond' ? 'true value' : 'false value'
类似于:
if 'cond'
'true value'
else
'false value'
end
?:
和 if else
之间的一个区别是优先级:
def foo a
a # just return a
end
foo 2 ? 3 : 4
# => 3
foo if 2 then 3 else 4 end
# error
在最后一个示例中 Ruby 想要 运行 function1 if condition
但它找到了 function if condition #some garbage
,因此 Ruby 引发了错误。