【问题标题】:using ruby ternary operator to puts a value and increment a variable使用 ruby​​ 三元运算符放置一个值并增加一个变量
【发布时间】:2013-03-12 18:53:57
【问题描述】:

如果测试为真,我想输入 1,如果不是,我想输入 0。我还想增加一个每次测试成功时计数的计数器。我现在有这个:

puts test1 ? sum += 1 : 0
puts test2 ? sum += 1 : 0
puts test3 ? sum += 1 : 0
puts test4 ? sum += 1 : 0

显然问题是,如果我每次都增加 sum,那么我打印的不是 1,而是 sum 的值。

我尝试了一个小方法,增加 sum 然后返回 1,如下所示:

def inc_sum_ret_1(sum)
  sum += 1
  1
end

并用它来代替“sum += 1”。当然,这每次只会从 0 增加到 1。

有什么好办法吗?从知识的角度来看,我比让我的代码特别整洁更好奇。

【问题讨论】:

    标签: ruby ternary-operator


    【解决方案1】:

    嗯,我认为您要编写的代码是

    puts test1 ? (sum += 1; 1) : 0
    puts test2 ? (sum += 1; 1) : 0
    puts test3 ? (sum += 1; 1) : 0
    puts test4 ? (sum += 1; 1) : 0
    

    当然,这不是一段很棒的代码。就代码清晰度和消除重复而言,只使用if 会好得多。

    【讨论】:

    • 这很棒 - 但是为什么,当我尝试在有括号的块中使用花括号时,ruby 会窒息吗?
    • @Ramy:因为那不是一个块——它只是一组表达式。块只能在语法上跟随消息发送,? 没有。
    • 正如 Chuck 所说,“这不是一段很棒的代码”。这不是你真正想要在真实代码中做的事情。是的,它有效,但它不容易阅读或理解,所以不要养成编写这样的代码的习惯。写清楚,干净。你老化的大脑稍后会感谢你。
    猜你喜欢
    • 1970-01-01
    • 2016-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    相关资源
    最近更新 更多