2014-06-24 33 views
0

我正在寫一個方法,由於某種原因它拋出一個錯誤,每當我運行一個each塊這樣的:Ruby'{x}'塊可以工作,但'do | x |'塊不?

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 
+4

您的代碼對我的作品(當然省略這兩個***的)。 –

+0

@LoganSerman有趣..你在本地運行嗎?它在Coderbyte和Repl.it(都是基於瀏覽器的)上都失敗了,所以我只是認爲它很糟糕。任何想法是怎麼回事? – tim5046

+0

是的,我只是直接將它粘貼到IRB中,它可以正常工作。 –

回答

0

多虧了很大的幫助在評論中大家,看起來這只是Coderbyte和Repl.it的問題,而不是代碼本身的問題。代碼在irb中運行得很好。 @Darek Nedza指出Coderbyte和Repl.it只運行Ruby 1.8.7,這可能是問題所在。

解決方案: 有關Repl.it或Coderbyte,在IRB只是仔細檢查奇怪的錯誤