Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 我的while循环有什么问题?_Ruby - Fatal编程技术网

Ruby 我的while循环有什么问题?

Ruby 我的while循环有什么问题?,ruby,Ruby,我正在重做我用Ruby完成的18项Euler挑战,我喜欢它。不幸的是,我犯了一些初学者的错误,无法找出我做错了什么。具体来说,下面的代码有什么问题?我试着把所有小于400万的斐波那契数相加 start = Time.now def sum_fibonacci_till_4_million previous_previous_value = 1 previous_value = 2 i = 2 fibo = Array.new while previou

我正在重做我用Ruby完成的18项Euler挑战,我喜欢它。不幸的是,我犯了一些初学者的错误,无法找出我做错了什么。具体来说,下面的代码有什么问题?我试着把所有小于400万的斐波那契数相加

start = Time.now

def sum_fibonacci_till_4_million
    previous_previous_value = 1
    previous_value = 2
    i = 2
    fibo = Array.new

    while previous_value < 4000000 do
        fibo.push(previous_previous_value)
        fibo.push(previous_value)

        temp = previous_value
        previous_value = previous_value + previous_previous_value
        previous_previous_value = temp

        i++
    end

    return fibo.inject(:+)
end

puts "The answer is #{sum_fibonacci_till_4_million()} and it took #{(start - Time.now) 
* 1000} milliseconds."
我以前有过这个错误,我设法用for循环修复了它。但很明显,我的最终陈述有问题。我不知道是什么


有人能帮我吗?

i++
在ruby中是不允许的。写入
i+=1

。例如,x++或x--将无法解析。更重要的是,++x或--x什么也做不了!事实上,它们的行为就像多个一元前缀运算符:-x==--x==--x==。。。。。。要增加一个数字,只需写x+=1

|没有后期或预增量或减量运算符

没有。因为我不能给他们面向对象的语义。它们基本上是任务。


啊,有趣。为什么不呢?@user2609980因为它没有。@user2609980-1回答这个问题。如果您只是问为什么Ruby没有
++
--
,那么这可能是有意义的,但是使用不存在的东西只是粗心大意。文件中没有任何地方写有这样的东西。你为什么认为Ruby有它?你太马虎了。这就像是在英语句子中随机混合一些希腊单词,然后问“为什么这个句子不被理解?”@sawa-Wow,这太刺耳了。有了这种态度,你可以用“RTFM!”来回避大多数问题。我同意我的态度是支持RTFM的。在这种典型的情况下,OP是懒惰的,我也讨厌它。但在这种情况下,它甚至超越了这一点。OP询问的是手册中不存在的东西:OP在Ruby上下文中已经在脑海中决定的东西。当您遇到这样的一般语法错误时,您可以使用分而治之的方法来查找它。首先,您可以注释掉
while/end
循环。没有更多的语法错误!接下来注释掉
while/end
循环中的行。没有错误。最后,当注释掉
i++
时,您会发现没有语法错误。作为
i.class=>Fixnum
,检查
Fixnum
文档。没有
:++
方法!它可能在
Fixnum.forests
中的一个类中吗
Fixnum.instance_方法。包括?(:++)=>false
表示“否”。但是为什么没有
:++
方法呢?谷歌“Ruby i++”。PS您应该显示
需要“时间”
2.rb:22: syntax error, unexpected keyword_end
2.rb:27: syntax error, unexpected $end, expecting keyword_end
...ime.now) * 1000} milliseconds."
...