【问题标题】: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

标签: ruby


【解决方案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是没有办法避免的吧?
猜你喜欢
  • 2016-12-14
  • 2019-04-22
  • 2011-10-06
  • 1970-01-01
  • 2022-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-20
相关资源
最近更新 更多