Ruby:“在`< ='中:Fixnum与Array的比较失败(ArgumentError)”

时间:2009-12-13 00:22:29

标签: ruby numbers

希望比我上一次更不那么新鲜......

无论如何,我在一个小应用上做了一些编码,将数字简化为素数,主要是为了帮助处理家庭作业等小事。

但是,一种特殊的方法是给我标题中提到的错误:

def get_simps(num)  
  curr = 2  
  print("Working...")  
  while (curr <= num)  
    #If they divide cleanly, then it's a simplified form  
    if (num % curr == 0)  
      res = [curr, num / curr]  
      break  
    end  
    curr += 1  
  end  
  print("\n")  
  return res    
end    

此语句提供参数 num

print("Insert number here: ")  
num = gets().chomp().to_i()  

因此使错误变得奇怪:为什么我说比较Fixnum和ARRAY?我也这样做了:

if (num.class() == curr.class())  
 print "Cheese"  
end  

它印了奶酪。为什么出错的原因呢?

1 个答案:

答案 0 :(得分:1)

发布的代码看起来不应该给出描述的错误,除非你无意中将它提供给数组。

您可能希望查看divmod()函数,它可以在某种程度上清理内部循环。如果最小的素因子很大,你将会执行许多不必要的整数除法。

这不是您正在寻找的答案,但可以找到一个特别优雅的Ruby素因子解决方案here