gpt4 book ai didi

ruby-on-rails - 如何在 Ruby 中查找 + 的类

转载 作者:太空宇宙 更新时间:2023-11-03 17:05:11 25 4
gpt4 key购买 nike

Ruby 的设计理念令人惊叹。所以我做了 1 + 2 并得到了 3。我设法做到了:1.+(2) # => 3

虽然这很酷,但我还想在 + 方法上测试 class 方法。

+.class
=> SyntaxError: (irb):14: syntax error, unexpected '.'
+.class
^

然后:

+().class
=> NoMethodError: undefined method `+@' for NilClass:Class

同时:

+(2).class
NoMethodError: undefined method `+@' for Fixnum:Class

为什么 +(2).class 是 fixnum 而不是整数?我用 +(2.to_i).class 再试一次,+(2).class 出现同样的错误。

但是回到关键问题:如何找到+方法的类?

最佳答案

1 + 22 作为参数调用 1 上的 + 方法,这是与 1.+(2) 相同。

但是,由于优先级的关系,+(2).class实际上是先调用(2).class,返回一个Class的实例>,然后调用不存在的+@方法,这是只存在于Numeric的一元加法。您可以通过键入 (+(2)).class 来测试它,它会像预期的那样返回 Fixnum。这也是+().class的错误来源,因为()返回的是nil,而nil的类NilClass,它也没有 +@ 方法。

tl;dr:因为优先级使得前导 + 最后计算,如 +@

任何对象上的 + 方法都属于 Method 类,任何对象上的任何其他方法也是如此。但是,键入 + 会调用方法而不是返回方法,因为 Matz 在梦中看到返回方法而不是调用方法的编程语言不会运行。您可以通过使用方法名称调用 method 方法来将方法返回给您,如下所示:1.method(:+)。然后你可以让方法对象告诉你它的类是什么:1.method(:+).class

关于ruby-on-rails - 如何在 Ruby 中查找 + 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22603851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com