【问题标题】:What is wrong with this piece of Ruby code? Why is array empty after map code block? [duplicate]这段 Ruby 代码有什么问题?为什么地图代码块后数组为空? [复制]
【发布时间】:2021-09-24 09:15:35
【问题描述】:
r = "FBFB".split("").map do |char|
  if char == "F"
    return 1
  end
  if char == "B"
    return 2 
  end
end
puts r.inspect

我没有打印到控制台。我做错了什么?

【问题讨论】:

  • 您希望收到什么? 1212?
  • 一个数组:[1,2,1,2]
  • 出了什么问题:不需要return并更正if-else语句

标签: ruby


【解决方案1】:
r = "FBFB".split("").map do |char|
  if char == "F"
    1
  elsif char == "B"
    2 
  end
end

puts r.inspect

【讨论】:

    【解决方案2】:

    原来你不能在代码块内使用return,但你应该使用next (source)。

    【讨论】:

    • 恕我直言,你不应该在这里使用next。可以,但不应该。我会亲自做 zswqa 的回答中描述的事情。
    • 为什么?你不解释。
    • 只有一个退出点而不是多个退出点的代码更易于阅读。
    • 您的评论自相矛盾。在没有显式返回(或等效语句,如本例中的next)的情况下,主体将始终完整执行并返回最后评估的表达式的值。这就是我所说的“一个出口点”。总是最后的表达。是的,这正是我喜欢这段代码的原因。
    • 不,我的意思是整个方法体。无论如何,这让我们无处可去,所以我会停下来。在这里使用 next 是有效的,即使它不是惯用的 ruby​​。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-26
    • 2015-04-25
    • 2018-09-09
    相关资源
    最近更新 更多