如何确定方法所在的类/模块

时间:2012-10-22 15:09:59

标签: ruby-on-rails ruby

在Eclipse中使用Java时,我总是非常容易确定方法的定义:只需按住ctrl +单击方法调用,它就会将其带到包含类的方法定义中。显然,Eclipse会让很多事情发生,但即使使用普通的旧Java,我们仍然可以依赖于import语句。

使用Rails开发方法查找似乎非常困难。

以下是一个例子:

require 'test_helper'

class UserStoriesTest < ActionDispatch::IntegrationTest
  fixtures: products

  LineItem.delete_all
  Order.delete_all
  ruby_book = products(:ruby)

  get "/"
  assert_response :success
  assert_template "index"

  cart = Cart.find(session[:cart_id])
  assert_equal 1, cart.line_items.size
  assert_equal ruby_book, cart.line_items[0].product

  get "/orders/new"
  assert_response :success
  assert_template "new"
end

假设我想仔细研究一下 assert_equal 方法。如果我正在使用Java并且包含 assert_equal 的类可能会被此类中的import语句描述,并且其位置已明确指定(例如 java.lang.SomeCoreClass ) 。由于我不知道这个方法到底在哪里定义,我最终做的是谷歌搜索“assert_equal”以发现我正在调查的方法(可能并且希望)在 Test :: Unit ::中定义断言

我很想听听一些人确定方法位置的方法。

2 个答案:

答案 0 :(得分:4)

试试这个:

class Bong
  def smoke
    puts "smoke"
  end
end

Bong.method(:smoke)
Bong.method(:smoke).source_location

答案 1 :(得分:1)

您可以使用method(:<method_name>).owner来跟踪方法的类。在您的情况下,它将是method(:assert_equal).owner

method#owner