【问题标题】:Ruby while loop within if statementif语句中的Ruby while循环
【发布时间】:2013-01-18 03:30:23
【问题描述】:

在 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

我得到第二个“end”语句的“unexpected keyword_end”。如果我删除 while 循环,则代码运行时不会出错。有什么想法吗?

【问题讨论】:

  • Ruby 中没有i++
  • 我很想知道为什么这个问题被否决了,这样我以后就不会犯同样的错误了?

标签: ruby


【解决方案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

i++ 语法在 Ruby 中不起作用

【讨论】:

  • 可能是因为 Ruby 中没有这样的东西:p
【解决方案2】:

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

首先我想引用Alexey Anufriyev

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

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

另外,你的代码是漂亮的 C 风格。这有点像红宝石(尽管您是否在同一行中编写简短的语句是一个品味问题):

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

【讨论】:

    【解决方案3】:

    Ruby 有太多糖不能用 C 风格来编码 :)

    试试类似的东西

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

    【讨论】:

      【解决方案4】:

      您想使用 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
      

      【讨论】:

        【解决方案5】:

        唯一错误的是i++。我可能会建议将风格从 C 风格迁移到规范的 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
        

        【讨论】:

          猜你喜欢
          • 2015-05-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-09
          • 2014-01-21
          • 2015-11-08
          • 2016-01-12
          • 2013-11-01
          相关资源
          最近更新 更多