Почему модули не всегда соблюдают 'require' в ruby? - PullRequest
0 голосов
/ 17 сентября 2008

(извините, я должен был быть более понятным с кодом, когда впервые опубликовал это. Надеюсь, это имеет смысл)

Файл "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?

Я получаю исключение, потому что размеры - это Object, а не SizeSpecification, поэтому у них нет функции "fit"

Ответы [ 3 ]

1 голос
/ 18 сентября 2008

Твои настройки и установка 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 
$

Нет ошибок!

0 голосов
/ 19 сентября 2008

Код вопроса меня немного смутил.

Вообще с Руби, если это происходит, это хороший признак того, что я пытаюсь сделать что-то не так.

Возможно, лучше задать вопрос, связанный с вашим фактическим предполагаемым результатом, а не со спецификой конкретной «атаки» на вашу проблему. Они могут сказать: «Нононо, не делай этого, делай ЭТО» или «ааааа, теперь я понимаю, что ты хочешь делать»

0 голосов
/ 17 сентября 2008

Во втором чтении я немного запутался, вы, кажется, хотите смешать класс в модуль, что, по-видимому, не очень желательно. Также YAML должен загружать массив спецификаций размера?

Похоже, вы не микшируете Модуль в своем классе. Если я запускаю тест в irb, то require выдает LoadError. Итак, я предполагаю, что вы сложили два файла вместе, если не сбросили его.

Обычно вы пишете функциональность в модуле, а затем смешиваете это с классом. так что вы можете изменить свой код следующим образом:

class SizeSpecification
  include SomeModule
  def fits?     
  end
end

Что позволит вам потом сказать:

SizeSpecification::SomeModule.sizes

Я думаю, вы также должны быть в состоянии сказать:

SizeSpecification.sizes

Однако для этого требуется, чтобы вы удалили self из префикса определения метода размеров.

Это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...