0

(对不起,我第一次发布此代码时应该更清楚代码。希望这是有道理的)

文件“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?

我得到一个例外,因为“尺寸”是对象而不是 SizeSpecification,所以它们没有“适合”功能。

4

3 回答 3

1

你的设置和红宝石安装好吗?我创建了这 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 
$

没有错误!

于 2008-09-18T17:35:31.590 回答
0

问题代码让我有点困惑。

一般来说,对于 Ruby,如果发生这种情况,这是一个好兆头,表明我正在尝试以错误的方式做事。

询问与您的实际预期结果相关的问题可能会更好,而不是针对您的问题的特定“攻击”的细节。他们我们可以说'nonono,不要那样做,这样做'或'ahhhhh,现在我明白你想做什么'

于 2008-09-19T16:57:22.367 回答
0

在第二次阅读时我有点困惑,您似乎想将类混合到模块中,这可能不是那么可取的。YAML 还应该加载 SizeSpecifications 的数组吗?

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

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

class SizeSpecification
  include SomeModule
  def fits?     
  end
end

这将允许您说:

SizeSpecification::SomeModule.sizes

我想你也应该能够说:

SizeSpecification.sizes

但是,这需要您将 self 从 sizes 方法定义的前缀中去掉。

这有帮助吗?

于 2008-09-17T04:44:44.320 回答