【问题标题】:Ruby: counters, counting and incrementingRuby:计数器,计数和递增
【发布时间】:2010-04-14 23:36:13
【问题描述】:

如果你看过我之前的问题,你就会知道我在 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

感谢您的回答、cmets 和反馈!

【问题讨论】:

  • 你为什么不尝试一个专为 Ruby 设计的网站?
  • 为什么 Oscar Reyes 不停止发帖?
  • 这个网站很不错,只要它不够疯狂,我就可以阅读 C 代码。此外,它看起来很复古。
  • @NSD 对不起? :P @Shyam 听起来很有趣,你能提供链接吗?
  • @Shyam: 很好......那里有一些有趣的东西。自 1996 年以来,该页面已被访问 3097 次。要么是非常罕见的页面,要么计数器已经转过身来。

标签: ruby irb


【解决方案1】:

“=> 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

【讨论】:

  • @jeremy:它实际上打印了=&gt; nil,这是执行的结果:print "\n" 我已经更新了你的答案以反映这一点。
  • 不客气@Shyam,谢谢@Oscar ...显然我并没有真正测试过:P
【解决方案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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2019-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多