我可以使用三元运算符而不是while循环

时间:2014-01-15 09:21:38

标签: ruby while-loop ternary-operator

我正在尝试将下面的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

4 个答案:

答案 0 :(得分:3)

对于以后的行,您可以使用Array#each_index

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

答案 1 :(得分:3)

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

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

#each_index(ram建议)同样有效。

但如果array实际上是week,那么它会变得更简单:

week.each {|x| yield x}

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

答案 2 :(得分:0)

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

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

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

我不清楚,array变量来自何处。即使在你的例子中,也没有这种变量的定义。

答案 3 :(得分:0)

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

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

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