向上导航 Ruby 对象
Navigating up Ruby Objects
在 ruby 个对象内向下导航非常简单。给定以下伪代码,并使用此段落作为示例输入,以下调用有意义且有效:
forth_word = Par.sentence[0].word[3]
puts forth_word.text #"ruby"
puts forth_word.type #:noun
相互包含的类的伪代码:(有点嵌套但不是严格的 OOP 意义)
class Paragraph
@page_number = #1 (default)
@sentences = []
end
class Sentence
@is_a_quote = #false (default)
@words = []
end
class Word
@text =# "ruby"
@type =# :noun
def in_a_quote?
#... return Sentence.@is_a_quote
end
def on_page
#... return Paragraph.Sentence.page
end
end
当我尝试向上导航 Ruby 对象树时,棘手的部分就变成了……也就是从 Word 内部属于 Sentence 或 Paragraph 对象的信息中询问。关于如何编写最后两种方法的任何建议:
puts forth_word.in_a_quote #false
puts forth_word.on_page #1
每个单词都可以有一个句子变量,指向它所在的句子。句子和段落以及段落和页面也是如此。
首先,您的 classes 没有嵌套。它们应该在彼此内部声明。
class Paragraph
@page_number = #1 (default)
@sentences = []
class Sentence
@is_a_quote = #false (default)
@words = []
class Word
@text =# "ruby"
@type =# :noun
end
end
end
但与 Java 不同,在 Ruby 中,您无法从内部变量访问外部 class 的变量。 Ruby Constants and Nested Classes
而且最好使用模块而不是嵌套 classes.
但是如果您仍想使用与示例中相同的层次结构,请注意访问 class 之外的数据。
例如,如果你尝试执行这段代码,你会得到一个错误
class Word
@text =# "ruby"
@type =# :noun
def in_a_quote?
#... return Sentence.@is_a_quote
end
end
w = Word.new
w.is_a_quote?
这是非常危险的,并且与 OOP 原则相矛盾。
在 ruby 个对象内向下导航非常简单。给定以下伪代码,并使用此段落作为示例输入,以下调用有意义且有效:
forth_word = Par.sentence[0].word[3]
puts forth_word.text #"ruby"
puts forth_word.type #:noun
相互包含的类的伪代码:(有点嵌套但不是严格的 OOP 意义)
class Paragraph
@page_number = #1 (default)
@sentences = []
end
class Sentence
@is_a_quote = #false (default)
@words = []
end
class Word
@text =# "ruby"
@type =# :noun
def in_a_quote?
#... return Sentence.@is_a_quote
end
def on_page
#... return Paragraph.Sentence.page
end
end
当我尝试向上导航 Ruby 对象树时,棘手的部分就变成了……也就是从 Word 内部属于 Sentence 或 Paragraph 对象的信息中询问。关于如何编写最后两种方法的任何建议:
puts forth_word.in_a_quote #false
puts forth_word.on_page #1
每个单词都可以有一个句子变量,指向它所在的句子。句子和段落以及段落和页面也是如此。
首先,您的 classes 没有嵌套。它们应该在彼此内部声明。
class Paragraph
@page_number = #1 (default)
@sentences = []
class Sentence
@is_a_quote = #false (default)
@words = []
class Word
@text =# "ruby"
@type =# :noun
end
end
end
但与 Java 不同,在 Ruby 中,您无法从内部变量访问外部 class 的变量。 Ruby Constants and Nested Classes 而且最好使用模块而不是嵌套 classes.
但是如果您仍想使用与示例中相同的层次结构,请注意访问 class 之外的数据。 例如,如果你尝试执行这段代码,你会得到一个错误
class Word
@text =# "ruby"
@type =# :noun
def in_a_quote?
#... return Sentence.@is_a_quote
end
end
w = Word.new
w.is_a_quote?
这是非常危险的,并且与 OOP 原则相矛盾。