如何从 gem 中的 class 创建对象?
How does one create an object from a class within a gem?
假设您在一个模块中编写了一个包含 class 的 gem。如果安装 gem 并希望从 class 创建一个对象实例,他们如何在另一个 rb 文档中成功地做到这一点?这是我的 gem class.
需要"Sentencemate/version"
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([=13=]=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>'
能够在我安装的 gem 中使用 classes 的正确方法是什么?
在你的Sentence
class
@words << Word.new(elem)
Word
已正确解析,因为 ruby 首先查看当前命名空间(即 Sentencemate
模块)。
在该模块之外,必须使用完全限定的名称,例如 Sentencemate::Word
。这是区分此 Word
与十几个其他 Word
classes 用户应用程序可能具有的必要条件。
假设您在一个模块中编写了一个包含 class 的 gem。如果安装 gem 并希望从 class 创建一个对象实例,他们如何在另一个 rb 文档中成功地做到这一点?这是我的 gem class.
需要"Sentencemate/version"
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([=13=]=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>'
能够在我安装的 gem 中使用 classes 的正确方法是什么?
在你的Sentence
class
@words << Word.new(elem)
Word
已正确解析,因为 ruby 首先查看当前命名空间(即 Sentencemate
模块)。
在该模块之外,必须使用完全限定的名称,例如 Sentencemate::Word
。这是区分此 Word
与十几个其他 Word
classes 用户应用程序可能具有的必要条件。