0

有谁知道为什么这个脚本不起作用?

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

4 回答 4

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
于 2013-03-14T13:57:40.280 回答
2

您缺少两个“结束”语句。

一个用于“如果”

另一个“暂时”

于 2013-03-14T13:57:16.847 回答
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
于 2013-03-14T13:57:26.467 回答
1

正如其他人所说,你错过了一些结局......而且没有条件的赤裸裸的 elsif 让我烦恼;如果您实际上并没有测试某些东西,则需要一个 else。

至于样式,您应该在 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 

事实上,ruby 让这一切变得如此简单,我什至不会编写那个函数。

于 2013-03-14T15:08:24.070 回答