查找倍数的脚本返回“unexpected $ end”

时间:2013-03-14 13:55:25

标签: ruby

有人知道为什么这个脚本无效吗?

def multiples_three (n)
    i=1
    while i<n
        if i%3==0
            print "#{i}"
            i=i+1
        elsif
            i=i+1
end

它返回:

syntax error, unexpected $end, expecting keyword_end

4 个答案:

答案 0 :(得分:3)

看起来你错过了几个“结束”。

def multiples_three (n)
    i=1
    while i<n
        if i%3==0
            print "#{i}"
            i=i+1
        elsif
            i=i+1
        end
    end
end

答案 1 :(得分:2)

您缺少两个“结束”声明。

一个用于“if”

“while”的另一个

答案 2 :(得分:2)

你错过了结束

def multiples_three (n)
    i=1
    while i<n
        if i%3==0
            print "#{i}"
            i=i+1
        elsif
            i=i+1
        end #<--- needed
    end #<--- also needed
end

答案 3 :(得分:1)

正如其他人所说的那样,你错过了一些结局......而那些没有条件的裸露的elsif会让我感到烦恼;如果你实际上没有测试某些东西,你需要一个别的。

至于样式,你应该在ruby中使用两个空格:

def multiples_three(n)
  i=1
  while i<n
    if i % 3 == 0
      print i  # no need to put in string and interpolate if it is by itself
      i=i+1
    else
      i=i+1
    end
  end
end

但是执行它的方式越多,就可以使用迭代器,范围和返回数组值,而不是直接从函数中打印:

def multiples_three(n)
  (1..n).select{|i| i % 3==0 }
end

puts multiples_three(12).join("\n")
3
6
9
12
=> nil 

事实上,红宝石这么简单,我甚至都不会写这个功能。