我正在编写一种方法,出于某种原因,每当我运行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
答案 0 :(得分:0)
感谢大家的评论中的大力帮助,看来这只是Coderbyte和Repl.it的一个问题,而不是代码本身的问题。代码在irb中运行得很好。 @Darek Nedza指出,Coderbyte和Repl.it只运行Ruby 1.8.7,这可能就是问题所在。
<强>解决方案:强> 对于Repl.it或Coderbyte上的奇怪错误,只需双重检查irb