Ruby while循环if语句

时间:2013-01-17 18:38:14

标签: ruby

在Ruby中使用以下代码:

if (tickFormat.length > 12 && tickFormat.length < 24)
    i = 1
    while(i < tickFormat.length) do
        if (i%2 != 0)
          tickFormat.at(i)[1] = ''
        end
        i++
    end
end

我得到第二个“结束”语句的“意外的keyword_end”。如果我删除while循环代码运行没有错误。有什么想法吗?

5 个答案:

答案 0 :(得分:3)

试试这个:

if (tickFormat.length > 12 && tickFormat.length < 24)
  i = 1
  while(i < tickFormat.length) do
    if (i%2 != 0)
      tickFormat.at(i)[1] = ''
    end
    i += 1
  end
end

i++语法在Ruby

中不起作用

答案 1 :(得分:3)

你显然是来自C角,所以我身边有一些额外的信息:

首先我想引用Alexey Anufriyev

  

我认为您应该使用您的平台采用的命名约定。在C#代码中,underscore_case看起来很奇怪,因为Ruby中的camelCase =)

所以你应该考虑使用下划线表示法。

你的代码也很漂亮。这有点像红宝石(尽管你是否在同一行写下简短的陈述是一种品味问题):

if tick_format.length === (13..23)
  tick_format.each_with_index do |tf, i|
    tf[1] = '' if i.odd?
  end
end

# if you use active support's core extensions (which is recommended imho)
# you can rewrite line 1 as:
if tick_format.length.in? 13..23

答案 2 :(得分:1)

Ruby有太多的糖来编码C风格:)

尝试类似

的内容
if tickFormat.length.between?(13,23)
  (1..tickFormat.length).step(2) do |i|
    tickFormat.at(i)[1] = ''
  end
end

答案 3 :(得分:0)

您想使用i + = 1来递增。

if tickFormat.length > 12 && tickFormat.length < 24
        i = 1
        while i < tickFormat.length do
            if (i%2 != 0)
              tickFormat.at(i)[1] = ''
            end
            i+=1
        end
    end

答案 4 :(得分:0)

唯一不对的是i++。我可能会建议将样式从C-like迁移到canonical-Ruby,但这只是个人选择......

if (13..23) === tickFormat.length
  i = 1
  while i < tickFormat.length
    if i % 2 != 0
      tickFormat.at(i)[1] = ''
    end
    i += 1
  end
end