Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何确定方法所在的类/模块_Ruby On Rails_Ruby - Fatal编程技术网

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

Ruby on rails 如何确定方法所在的类/模块,ruby-on-rails,ruby,Ruby On Rails,Ruby,通过在Eclipse中使用Java,我可以非常轻松地确定方法的定义位置:只需按住ctrl键并单击方法调用,它就会将您带到其包含类中的方法定义。很明显,这是Eclipse造成的,但即使使用普通的旧Java,我们仍然可以依赖import语句 在Rails开发中,方法查找似乎非常困难 下面是一个例子: require 'test_helper' class UserStoriesTest < ActionDispatch::IntegrationTest fixtures: product

通过在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
需要“测试助手”
类UserStoriesTest
比方说,我想更仔细地看看assert_equal方法。如果我使用的是Java,那么包含assert_equal的类可能会由该类中的import语句描述,并明确指定其位置(例如Java.lang.SomeCoreClass)。因为我不知道这个方法到底是在哪里定义的,所以我最后要做的就是在谷歌上搜索“assert_equal”,发现我正在研究的方法(可能也是希望)是在Test::Unit::Assertions中定义的

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

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

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

试试这个:

class Bong
  def smoke
    puts "smoke"
  end
end

Bong.method(:smoke)
Bong.method(:smoke).source_location
试试这个:

class Bong
  def smoke
    puts "smoke"
  end
end

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

您是否询问哪个编辑器支持ctrl单击“转到定义”?RubyMine就是这么做的。你是在问哪个编辑器支持ctrl键点击“转到定义”吗?鲁比明做得最好,所以回答。道具。一个相关的例子总是有帮助的;)lmao是迄今为止最好的答案。道具。一个相关的例子总是有帮助的;)是的,但这对我有什么帮助?我不能只启动irb并键入assert_equal.owner。您可以在项目的范围内使用它来确定是哪个类定义了您的方法。如果你在irb中定义你的类,那么你也应该能够在irb中使用这个方法?我不能只启动irb并键入assert_equal.owner。您可以在项目的范围内使用它来确定是哪个类定义了您的方法。如果您在irb中定义了类,那么您也应该能够在irb中使用这个方法。