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

标签 ruby-on-rails ruby

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/

相关文章:

ruby-on-rails - Nokogiri- 解析 HTML <a href> 并仅显示部分 URL

ruby-on-rails - 如何 stub 或模拟 Rails 中的 request.subdomains 方法?

ruby-on-rails - 未定义的方法每个 rails 错误

regex - 没有全局标志的Ruby正则表达式

ruby-on-rails - 在 try 和 and 之间推荐哪种语法。当我们在 Ruby on Rails 中处理 nil 值时?

ruby-on-rails - Blob 数量大于上传文件数量

ruby - 未定义方法 add_to_base

ruby - 使用 Ruby 将 HTML 转换为纯文本?

ruby-on-rails - 在 Rails 控制台中使用 html_escape 等辅助方法

Ruby:安装 bundler gem 时出现奇怪的错误