3

在 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 循环,则代码运行时不会出错。有任何想法吗?

4

5 回答 5

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

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

于 2013-01-17T18:40:02.287 回答
3

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

首先我想引用阿列克谢·阿努弗里耶夫的话

我认为您应该使用您的平台采用的命名约定。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
于 2013-01-17T19:30:23.017 回答
1

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

尝试类似的东西

if tickFormat.length.between?(13,23)
  (1..tickFormat.length).step(2) do |i|
    tickFormat.at(i)[1] = ''
  end
end
于 2013-01-17T18:53:15.930 回答
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
于 2013-01-17T18:43:49.130 回答
0

唯一错误的是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
于 2013-01-17T18:44:25.867 回答