0

由于在 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::Assertions中定义的。

我很想听听一些人关于他们确定方法位置的方法。

4

2 回答 2

4

试试这个:

class Bong
  def smoke
    puts "smoke"
  end
end

Bong.method(:smoke)
Bong.method(:smoke).source_location
于 2012-10-22T15:15:30.950 回答
1

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

方法#所有者

于 2012-10-22T15:15:23.067 回答