Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.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 prob,文件名为.dirname(_文件名),类为inherance_Ruby On Rails - Fatal编程技术网

Ruby on rails Ruby prob,文件名为.dirname(_文件名),类为inherance

Ruby on rails Ruby prob,文件名为.dirname(_文件名),类为inherance,ruby-on-rails,Ruby On Rails,我有家长班 /dir1/test1.rb 然后我让孩子们去上课 /dir2/test2.rb test1类有一个使用“File.dirname(File)”的方法。 但是当我从test2调用这个方法时,这是test1固有的 dir是dir1,而不是dir2,test2是dir2 如何使其工作?必须在test2.rb中使用\uuuuu文件 就这么简单。这个怎么样 class Test2 def self.here @here ||= File.dirname(__FILE__) e

我有家长班 /dir1/test1.rb 然后我让孩子们去上课 /dir2/test2.rb

test1类有一个使用“File.dirname(File)”的方法。 但是当我从test2调用这个方法时,这是test1固有的 dir是dir1,而不是dir2,test2是dir2


如何使其工作?

必须在test2.rb中使用
\uuuuu文件

就这么简单。这个怎么样

class Test2
  def self.here
    @here ||= File.dirname(__FILE__)
  end
end

然后在test1中的方法中调用self.here

必须在test2.rb中使用
\uuuu文件

就这么简单。这个怎么样

class Test2
  def self.here
    @here ||= File.dirname(__FILE__)
  end
end

然后在test1中的方法中调用self。在这里,这有点粗糙,但是如果每个子类中都有一个方法,比如
def initialize
,那么可以从父类中的实例方法中执行此操作:

self.class.instance_method(:initialize).source_location[0]
self.instance_method(:initialize).source_location[0]
或者从父类的类方法中:

self.class.instance_method(:initialize).source_location[0]
self.instance_method(:initialize).source_location[0]

这将返回定义该方法的文件的位置(例如,
/dir2/test2.rb
)。

这有点粗糙,但是如果您有一个方法已经存在于每个子类中,比如
def initialize
,那么您可以从父类的实例方法中执行此操作:

self.class.instance_method(:initialize).source_location[0]
self.instance_method(:initialize).source_location[0]
或者从父类的类方法中:

self.class.instance_method(:initialize).source_location[0]
self.instance_method(:initialize).source_location[0]

这将返回定义方法的文件的位置(例如,
/dir2/test2.rb
)。

问题是我重复了太多,假设我有100个子类,然后每个子类都应该有这个方法。。。它疼而且不干:没有更好的解决办法吗?@Totty,请看我的答案。如果每个子类中都有一个方法,比如
initialize
,那么这个方法就行了。我现在不能确认任何事情,因为我已经多年不使用ruby了。。不过还是要谢谢你的回答。问题是我重复的太多了,假设我有100个儿童班,然后每个班都应该有这个方法。。。它疼而且不干:没有更好的解决办法吗?@Totty,请看我的答案。如果每个子类中都有一个方法,比如
initialize
,那么这个方法就行了。我现在不能确认任何事情,因为我已经多年不使用ruby了。。不过还是谢谢你的回答。。