红宝石块? : 表达式 [重复]

Posted

技术标签:

【中文标题】红宝石块? : 表达式 [重复]【英文标题】:Ruby block ? : expression [duplicate] 【发布时间】:2018-05-17 11:13:00 【问题描述】:
col = ["a", "b", "c"]
col.map!  |x| x == "b" ? x + "!" : x 

=> ["a", "b!", "c"]

块中的?: 是什么意思/做什么?

尽我所能通过 ruby​​ doc 搜索,但没有任何结果。

对于这些表达方式,我能做些什么?

帮助!

【问题讨论】:

搜索 三元运算符 或阅读文档here 【参考方案1】:

使用col.map!,您将代码块传递给数组中的每个元素,col。本例中的代码块是:if x == "b" 为 true then do x + "!" else return x。

所以? = 如果这是真的,那么就这样做

: = 否则

【讨论】:

从 ? = if, : = else 有没有 elsif 的? :之后你“嵌套”了操作符a = 3; a.zero? ? 'a' : a == 1 ? 'b' : 'c' 没有 elsif,因为 elsif 暗示我们的代码将返回三个或更多可能的值。对于三元运算符,代码块的第一部分将始终返回 true 或 false,因为我们要求的是 true 或 false 语句;所以我们只能得到两个可能的返回值。 糟糕,我的意思是在第一行说“可以”:没有 elsif,因为 elsif 暗示我们的代码可以返回三个或更多可能的值 (# Reverse all words of five more more letters in a string. Return the resulting; # string, e.g., reverse_five("Looks like my luck has reversed"); => "skooL like # my luck has desrever" def reverse_five(str) str.split(" ").each |x| x.length >= 5 ? x.反向! : nil.join(" ") end reverse_five("apple banana cat") => "elppa ananab cat") 猜猜: nil是没有办法避免的吧?

以上是关于红宝石块? : 表达式 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何覆盖红宝石块中的节点属性值/使用红宝石块中的变量值?

红宝石块内的赛璐珞异步不起作用

红宝石运算符“=〜” [重复]

干燥红宝石三元

红宝石正则表达式。限制最小和最大字符串长度

红宝书第7章.函数表达式