【问题标题】:Why does this code produce a nil following a Proc.call?为什么这段代码在 Proc.call 之后会产生 nil?
【发布时间】:2009-09-16 16:51:39
【问题描述】:
C:\>irb
irb(main):001:0> s = Proc.new { puts "Hello" }
=> #<Proc:0x04051780@(irb):1>
irb(main):002:0> s.call
Hello
=> nil

是什么导致了 nil?

ruby 1.8.6 (2008-08-11 patchlevel 287) [i386-mswin32]

【问题讨论】:

    标签: ruby irb proc-object


    【解决方案1】:

    s 没有返回值, 正如@sepp2k 在评论中指出的那样,puts 返回nil,所以nil 自动成为返回值,因为那是最后一个proc中的语句。

    它只是作为最后一条语句的返回值打印到终端,类似于将 proc 分配给 s 后的神秘输出。

    【讨论】:

    • 更准确地说:s返回puts返回的值,puts返回nil。
    • 我没怎么用过Ruby,我只是从其他语言的范例中学习。感谢并更新答案。
    • 似乎有一个(可以理解的)假设,如果 x 发生在 y 中,并且 y 是你第一次尝试的东西,x 一定是因为 y。除了“post hoc ergo proper hoc”之外,还有其他术语吗?
    猜你喜欢
    • 2016-07-23
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2011-01-17
    • 1970-01-01
    相关资源
    最近更新 更多