2015-09-15 5 views
0

Допустим, вы пишете в модуле драгоценный камень, содержащий классы. Если вы устанавливаете этот драгоценный камень и хотите создать экземпляр объекта из этого класса, как они могут сделать это в другом документе rb? Вот мой класс драгоценностей.Как создать объект из класса внутри драгоценного камня?

требуют «Sentencemate/версия»

module Sentencemate 
    #Object used to emulate a single word in text. 
    class Word 
    def initialize(word) 
     @word = word 
    end 
    def append(str) 
     @word = @word << str 
     return @word 
    end 
    def get 
     return @word 
    end 
    def setword(str) 
     @word = str 
    end 
    def tag(str) 
     @tag = str 
    end 
    end 
# Object used to emulate a sentence in text. 
    class Sentence 
    def initialize(statement) 
     @sentence = statement 
     statement = statement.chop 
     statement = statement.downcase 
     lst = statement.split(" ") 
     @words = [] 
     for elem in lst 
     @words << Word.new(elem) 
     end 
     if @sentence[@sentence.length-1] == "?" 
     @question = true 
     else 
     @question = false 
     end 
    end 
    def addword(str) 
     @words << Word.new(str) 
    end 
    def addword_to_place(str, i) 
     @words.insert(i, Word.new(str)) 
    end 
    def set_word(i, other) 
     @words[i].setword(other) 
    end 
    def [](i) 
     @words[i].get() 
    end 
    def length 
     @words.length 
    end 
    def addpunc(symbol) 
     @words[self.length-1].setword(@words[self.length-1].get << symbol) 
    end 
    def checkforword(str) 
     for elem in @words 
     if elem.get == str 
      return true 
     end 
     end 
     return false 
    end 
    end 
end 

в RubyMine, я попытаюсь следующее в IRB консоли:

/usr/bin/ruby -e $stdout.sync=true;$stderr.sync=true;load($0=ARGV.shift) /usr/bin/irb --prompt simple 
Switch to inspect mode. 
>> require 'Sentencemate' 
=> true 
>> varfortesting = Sentence.new("The moon is red.") 
NameError: uninitialized constant Sentence 
    from (irb):2 
    from /usr/bin/irb:12:in `<top (required)>' 
    from -e:1:in `load' 
    from -e:1:in `<main>' 

Что бы надлежащим образом, чтобы иметь возможность использовать классы в драгоценности, которую я установил?

+0

'Modulename :: Classname.new' для использования –

+0

Большое вам спасибо! –

ответ

1

В вашем Sentence классе

@words << Word.new(elem) 

Word решен правильно, потому что рубин выглядит в текущем пространстве имен первым (что, будучи Sentencemate модуля).

Вне этого модуля необходимо использовать полностью квалифицированные имена, например Sentencemate::Word. Это необходимо для того, чтобы отличить это Word от десятка других Word.

 Смежные вопросы

  • Нет связанных вопросов^_^