Ruby:“是的。”;在`<=';:将Fixnum与数组进行比较失败(ArgumentError)";

Ruby:“是的。”;在`<=';:将Fixnum与数组进行比较失败(ArgumentError)";,ruby,numbers,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

希望能比上一次少一些新鲜感

不管怎样,我正在一个小应用程序上做一些编码,它将数字简化为素数,主要是帮助做一些小事情,比如家庭作业

然而,一个特殊的方法给了我标题中提到的错误:

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    
因此使错误变得奇怪:为什么它说我比较Fixnum和数组?我也这样做了:

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

它还印着奶酪。那么,为什么会出现错误?

发布的代码看起来不应该给出所描述的错误,除非您无意中向其提供了一个数组

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


这不是你想要的答案,但是可以找到一个特别优雅的Ruby素因子解决方案,它可以复制到IRB中,并使用
get\u simps(get().chomp().to\u i())
不会给我一个错误(尽管它会给出错误的结果:get\u simps(15000)=>[2750]您发布的代码对我来说很好。您是否在做类似于“get_simps”(get_simps(20))”的事情?还有,“错”因为我希望它返回数字的素数分解。@Tordek实际上,这看起来像是一种检测素数的方法,它将返回因子以及除以该数字的结果,或者
nil
if prime。@new123456一个完整的回溯,也许这个程序的目的在这里会有很大帮助。感谢t我从头重写了整个算法(crap-o-rithm),在性能上似乎还可以。
if (num.class() == curr.class())  
 print "Cheese"  
end