【问题标题】:Can i use a ternary operator instead of while loop我可以使用三元运算符而不是while循环吗
【发布时间】:2014-02-03 16:23:00
【问题描述】:

我正在尝试将下面的 while 循环减少到一行

def this_method(week)
  i = 0
  while i < array.length
    yield(week[i])
    i += 1
  end
end

week.each do |week|
  puts week
end

【问题讨论】:

  • 答案是否定的。您不能使用三元运算符来替换 while 循环。每个都有不同的用例。
  • 我唯一能想到的就是将while循环转换为一个函数,这样我就可以调用循环了——这是最好的方法吗?
  • 为什么要这样做?三元运算符可能会简化一些操作,但通常情况下,当您重新访问时,它可能会使您的代码难以维护/理解。
  • 我想让代码更短更易读,以便清楚地了解各种运算符的用法,即它们能做什么和不能做什么。

标签: ruby while-loop ternary-operator


【解决方案1】:

和其他人一样,我对这个例子感到困惑(array 未定义,this_method 从未被调用)。但是您当然不需要 while 循环。我只使用Integer#times 方法,因为您没有使用数组值:

array.length.times {|i| yield week[i]}

#each_index(ram 建议的)也可以。

但如果array 真的是week,那么它就更简单了:

week.each {|x| yield x}

我不确定你为什么要创建一个只回收 #each 的方法。

【讨论】:

  • 好吧,我也很困惑,但我认为array 可以是返回数组的方法。
  • 对不起,数组应该是 'week'。我一直在玩它,为数组分配不同的数组。感谢您的详细回答。
【解决方案2】:

因为你可以使用Array#each_index:

array.each_index {|i| yield week[i] }

【讨论】:

    【解决方案3】:

    不,你不能。三元运算符是条件表达式,while是循环表达式。

    但是,在 Ruby 中,您通常使用枚举器,而不是 while。你的代码可以改写为

    def this_method(week)
      array.each_with_index { |item, i| yield(week[i]) }
    end
    

    我不清楚的是,array 变量来自哪里。即使在您的示例中,也没有此类变量的定义。

    【讨论】:

    • 对不起,数组应该是 'week'。我一直在玩它,为数组分配不同的数组。
    【解决方案4】:

    if 以任何形式检查条件一次。
    while 另一方面,可以多次检查条件。

    好吧,如果您不喜欢枚举器的其他答案,您可以使用不同的形式:

    def this_method(week)
      i = -1
      yield(week[i]) while (i+=1) < array.length
    end
    

    【讨论】:

      猜你喜欢
      • 2022-01-04
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 2013-10-09
      • 2023-02-16
      • 1970-01-01
      相关资源
      最近更新 更多