为什么模块总是不尊重ruby中的'require'?

时间:2008-09-17 02:54:33

标签: ruby

(对不起,我第一次发布这个代码时应该更清楚了。希望这很有意义)

档案“size_specification.rb”

class SizeSpecification
  def fits?     
  end
end

档案“some_module.rb”

require 'size_specification'

module SomeModule
  def self.sizes
    YAML.load_file(File.dirname(__FILE__) + '/size_specification_data.yml')
  end
end

文件“size_specification_data.yml

--- 
- !ruby/object:SizeSpecification 
  height: 250
  width: 300

然后我打电话

SomeModule.sizes.first.fits?

我得到一个例外,因为“尺寸”是对象不是尺寸规格的,因此它们没有“适合”功能。

3 个答案:

答案 0 :(得分:1)

您的设置和ruby安装是否正常?我创建了这3个文件并在“test.rb”

中写了下面的内容
require 'yaml'
require "some_module"

SomeModule.sizes.first.fits?

然后我跑了。

$ ruby --version
ruby 1.8.6 (2008-06-20 patchlevel 230) [i486-linux]
$ ruby -w test.rb 
$

没有错误!

答案 1 :(得分:0)

在第二次阅读时我有点困惑,你似乎想把这个类混合到模块中,这可能不太可取。 YAML是否应该加载SizeSpecifications的数组?

似乎您没有将模块混合到您的班级中。如果我在irb中运行测试,则require会抛出LoadError。所以我假设你把两个文件放在一起,如果没有转储它。

通常你会在模块中编写功能,然后将它混合到类中。所以你可以像这样修改你的代码:

class SizeSpecification
  include SomeModule
  def fits?     
  end
end

然后你可以说:

SizeSpecification::SomeModule.sizes

我想你也应该说:

SizeSpecification.sizes

但是,这需要您从自定义大小方法定义的前缀。

这有帮助吗?

答案 2 :(得分:0)

问题代码让我有点困惑。

一般情况下,对Ruby来说,如果发生这种情况,这是一个好兆头,我试图以错误的方式做事。

最好提出一个与您的实际预期结果相关的问题,而不是针对您的问题的特定“攻击”的具体情况。他们我们可以说'nonono,不要那样做,做这个'或'啊啊,现在我明白你想做什么'