Ruby' {x}'块工作,但' do | x |'块不?

时间:2014-06-24 17:20:27

标签: ruby

我正在编写一种方法,出于某种原因,每当我运行each这样的块时,它就会抛出错误:

array.each do |i|
something_on_i
end

但是,当我做同样的事情时,它不会抛出错误:

array.each {|i| something_on_i}

为什么呢?我以为这两个是相同的。

这里是完整的代码:

工作:

def factor(num)
    i=2
    factors=[1]
    while i<=num
        if (num % i == 0)
          factors << i
        end
     i+=1
    end
    return factors
end

def Division(num1,num2)
  facs1=factor(num1)
  facs2=factor(num2)
  common=[]

  ***facs2.each {|i| common << i if facs1.include?i}***

  return common.max

end

# keep this function call here 
# to see how to enter arguments in Ruby scroll down   
Division(STDIN.gets)  

不工作:

def factor(num)
    i=2
    factors=[1]
    while i<=num
        if (num % i == 0)
          factors << i
        end
     i+=1
    end
    return factors
end

def Division(num1,num2)
  facs1=factor(num1)
  facs2=factor(num2)
  common=[]

  ***facs2.each do |i| 
    if facs1.include?(i)       
    common << i
    end
   end***

  return common.max

end

# keep this function call here 
# to see how to enter arguments in Ruby scroll down   
Division(STDIN.gets)  

我得到的错误是:

(eval):334: (eval):334: compile error (SyntaxError)
(eval):323: syntax error, unexpected kDO_COND, expecting kEND
  facs2.each do |i|
               ^
(eval):324: syntax error, unexpected tIDENTIFIER, expecting kDO or '{' or '('
(eval):334: syntax error, unexpected kEND, expecting $end

1 个答案:

答案 0 :(得分:0)

感谢大家的评论中的大力帮助,看来这只是Coderbyte和Repl.it的一个问题,而不是代码本身的问题。代码在irb中运行得很好。 @Darek Nedza指出,Coderbyte和Repl.it只运行Ruby 1.8.7,这可能就是问题所在。

<强>解决方案: 对于Repl.it或Coderbyte上的奇怪错误,只需双重检查irb