关于在Ruby中的块中使用块的错误-数组can';不能强制为Fixnum(TypeError)
这是关于Euler项目的问题#1。当我在irb中逐行运行此代码时,我得到了预期的答案,但当我从.rb文件运行它时,它抛出错误“Array不能强制为Fixnum(TypeError)” 代码:关于在Ruby中的块中使用块的错误-数组can';不能强制为Fixnum(TypeError),ruby,arrays,type-coercion,fixnum,Ruby,Arrays,Type Coercion,Fixnum,这是关于Euler项目的问题#1。当我在irb中逐行运行此代码时,我得到了预期的答案,但当我从.rb文件运行它时,它抛出错误“Array不能强制为Fixnum(TypeError)” 代码: #定义从“n”到0的整数列表 def Zi(a,b) 懒惰的;懒惰的 结束 #方程numberofoccurrences(最小倍数+最大倍数)/2给出了给定范围内所有倍数的总和 #因此,下面是multipleCounts[i](multiples[i]+lastMultiples[i])/2=>multip
#定义从“n”到0的整数列表
def Zi(a,b)
懒惰的;懒惰的
结束
#方程numberofoccurrences(最小倍数+最大倍数)/2给出了给定范围内所有倍数的总和
#因此,下面是multipleCounts[i](multiples[i]+lastMultiples[i])/2=>multipleCounts[i](lastAndFirstMultipleSums[i])/2
#给出指定范围内给定数字的任意倍数和(以倍数为单位)。
def查找每个倍数的总和(从,到,*倍数)
myReverseArr=Zi到,从
lastMultiples=multiples.map{| m | myreversearl.find{| i | i%m==0}
multipleCounts=lastMultiples.zip(multiples.map{| ms | ms.reduce(:/)}
lastAndFirstMultipleSums=lastMultiples.zip(multiples.map{| ms | ms.reduce(:+)}
sumsOfEachMultiple=lastAndFirstMultipleSums.zip(multipleCounts).map{xs | xs.reduce(:*)}.map{x | x/2}
结束
def find_sum_的倍数(从,到,*倍数)
sumsOfEachMultiple=为每个倍数(从、到、倍数)查找总和
公共倍数=[]
(0..(倍数长度-1))。每个do | i|
((i+1)…(乘以长度-1))。每个do | j|
commonMultiples ruby euler1.rb
euler1.rb:11:在“%”中:无法将数组强制为Fixnum(TypeError)
来自euler1.rb:11:in `为每一个(多个)查找(2个级别)和(sum)中的"块(2个级别)"
从euler1.rb:11:in'downto'
来自euler1.rb:11:in‘each’
来自euler1.rb:11:in‘each’
来自euler1.rb:11:in'find'
来自euler1.rb:11:in`block in find_sum_for_each_multiple'
来自euler1.rb:11:in'map'
来自euler1.rb:11:in“查找每个倍数的总和”
来自euler1.rb:18:in“查找倍数之和”
来自euler1.rb:32:in`'
我在一台核心i7 Windows 7 64位机器上运行,Ruby版本为2.0.0p0(2013-02-24)[x64-mingw32]
commonMultiples
已经是一个数组
,在为每个数组找到和
中,它被转换为数组的数组
换行
sumsOfCommonMultiples = find_sum_for_each_multiple(from, to, commonMultiples)
到
commonMultiples
已经是一个数组
,在find\u sum\u for\u each\u multiples
中,它被转换为数组的数组
换行
sumsOfCommonMultiples = find_sum_for_each_multiple(from, to, commonMultiples)
到
不管是谁投票否决了我,介意解释一下我为什么被否决吗?这对我来说似乎是个合理的问题。。。如果我可以在解释器中逐行执行相同的代码,并且没有错误,但是在从脚本运行代码时出现错误,这至少对我来说意味着我的逻辑是正确的,但是我缺少关于语言实现的某些特定内容。我在谷歌上搜索了一下,但我没有找到多少我认为与这个错误有关的东西。这可能是口译员的缺陷吗?不管是谁否决了我,介意解释一下我为什么被否决吗?这对我来说似乎是个合理的问题。。。如果我可以在解释器中逐行执行相同的代码,并且没有错误,但是在从脚本运行代码时出现错误,这至少对我来说意味着我的逻辑是正确的,但是我缺少关于语言实现的某些特定内容。我在谷歌上搜索了一下,但我没有找到多少我认为与这个错误有关的东西。这可能是翻译的缺陷吗?啊!所以我缺少的只是一点Ruby语法。谢谢这对我有用!我还想补充一点,我知道这还不是一个完整的解决方案-如果你用3个或更多的倍数尝试这个方法,它会崩溃,因为公共倍数的总和计算还没有找到所有的公共倍数重复。要做到这一点,我相信我必须编辑代码,不仅要计算所有对的公共倍数(2s)之和,还要计算三个三元组(3s)之和,等等,其中n是倍数的数目。我仍然在思考这个问题。我没有试图理解这个代码背后的逻辑。无论如何,祝你在这个问题上好运。:)啊!所以我缺少的只是一点Ruby语法。谢谢这对我有用!我还想补充一点,我知道这还不是一个完整的解决方案-如果你用3个或更多的倍数尝试这个方法,它会崩溃,因为公共倍数的总和计算还没有找到所有的公共倍数重复。要做到这一点,我相信我必须编辑代码,不仅要计算所有对的公共倍数(2s)之和,还要计算三个三元组(3s)之和,等等,其中n是倍数的数目。我仍然在思考这个问题。我没有试图理解这个代码背后的逻辑。无论如何,祝你在这个问题上好运。:)
sumsOfCommonMultiples = find_sum_for_each_multiple(from, to, commonMultiples)
sumsOfCommonMultiples = find_sum_for_each_multiple(from, to, *commonMultiples)