0

Eclipse で Java を使用して以来、メソッドが定義されている場所を特定するのは非常に簡単でした。メソッド呼び出しを ctrl キーを押しながらクリックするだけで、それを含むクラスのメソッド定義に移動できます。明らかに、これの多くを実現するのは Eclipse ですが、単純な古い Java を使用した場合でも、依存するインポート ステートメントがまだ残っています。

メソッド ルックアップは、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を含むクラスが、おそらく、明示的に指定された場所 (例: java.lang.SomeCoreClass ) を使用して、このクラスの import ステートメントによって記述されているとします。このメソッドがどこで定義されているのかまったくわからないので、最終的には、「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 に答える