2

如果你看过我之前的问题,你就会知道我在 Ruby 方面是个大笨蛋。因此,我发现了这个旨在用于 C 编程的网站,但我认为任何人可以用 C 做的事情,在 Ruby 中都必须是可能的(并且更具可读性)。

挑战是打印出一堆数字。我发现了这个漂亮的方法 .upto() 并且我使用了一个块(并且实际上理解了它的目的)。然而,在 IRb 中,我得到了一些意想不到的行为。

class MyCounter
    def run 
    1.upto(10) { |x| print x.to_s + " " } 
    end
end


irb(main):033:0> q = MyCounter.new
=> #<MyCounter:0x5dca0>
irb(main):034:0> q.run
1 2 3 4 5 6 7 8 9 10 => 1

我不知道 => 1 来自哪里:S 否则我应该这样做吗?我期待有这样的结果:

1 2 3 4 5 6 7 8 9 10

感谢您的回答、评论和反馈!

4

2 回答 2

3

“=> 1”来自 IRB,而不是您的代码。在您输入 IRB 的每个语句之后,它会在“=>”提示符后打印该语句的结果。

尝试在您的函数中打印换行符:

def run 
  1.upto(10) { |x| print x.to_s + " " }
  print "\n"
end

然后它看起来像这样:

irb> q.run
1 2 3 4 5 6 7 8 9 10
  => nil
于 2010-04-14T23:39:13.967 回答
2

我不知道 => 1 来自哪里

不用担心。默认情况下irb打印方法执行的返回值。

即使您不编写return语句(例如在 C 中),Ruby 也会返回最后一个计算语句的值。

在这种情况下,它是 1

就这样。

例如尝试:

class WhereIsTheReturn
    def uh?
        14 * 3 # no return keyword
    end
end


whereIsIt = WhereIsTheReturn.new
hereItIs = whereIsIt.uh?
print "Here it is : #{hereItIs}\n"
于 2010-04-14T23:45:24.050 回答