class Rake::LinkedList
多态链表结构,用于在 Rake 中实现多个数据结构。
常量
- EMPTY
属性
head[R]
tail[R]
公共类方法
cons(head, tail) 点击切换源代码
将新的头节点添加到尾部列表。
# File rake-13.2.1/lib/rake/linked_list.rb, line 73 def self.cons(head, tail) new(head, tail) end
empty() 点击切换源代码
给定 LinkedList
类的标准空列表类。
# File rake-13.2.1/lib/rake/linked_list.rb, line 78 def self.empty self::EMPTY end
make(*args) 点击切换源代码
使用给定的参数创建一个列表。此方法是多态的
# File rake-13.2.1/lib/rake/linked_list.rb, line 59 def self.make(*args) # return an EmptyLinkedList if there are no arguments return empty if !args || args.empty? # build a LinkedList by starting at the tail and iterating # through each argument # inject takes an EmptyLinkedList to start args.reverse.inject(empty) do |list, item| list = cons(item, list) list # return the newly created list for each item in the block end end
new(head, tail=EMPTY) 点击切换源代码
# File rake-13.2.1/lib/rake/linked_list.rb, line 84 def initialize(head, tail=EMPTY) @head = head @tail = tail end
公共实例方法
==(other) 点击切换源代码
列表在结构上是等效的。
# File rake-13.2.1/lib/rake/linked_list.rb, line 25 def ==(other) current = self while !current.empty? && !other.empty? return false if current.head != other.head current = current.tail other = other.tail end current.empty? && other.empty? end
conj(item) 点击切换源代码
以多态方式将新元素添加到列表的头部。头节点的类型将与尾部相同的列表类型。
# File rake-13.2.1/lib/rake/linked_list.rb, line 12 def conj(item) self.class.cons(item, self) end
each() { |head| ... } 点击切换源代码
对于列表中的每个项目。
# File rake-13.2.1/lib/rake/linked_list.rb, line 48 def each current = self while !current.empty? yield(current.head) current = current.tail end self end
empty?() 点击切换源代码
列表是否为空? .make 方法会阻止列表为空,默认情况下会使任何实例化的 LinkedList
对象不为空。如果实现自己的 .make 方法,则应考虑重写此方法
# File rake-13.2.1/lib/rake/linked_list.rb, line 20 def empty? false end
inspect() 点击切换源代码
与 to_s
相同,但带有检查过的项目。
# File rake-13.2.1/lib/rake/linked_list.rb, line 42 def inspect items = map(&:inspect).join(", ") "LL(#{items})" end
to_s() 点击切换源代码
转换为字符串:LL(item, item…)
# File rake-13.2.1/lib/rake/linked_list.rb, line 36 def to_s items = map(&:to_s).join(", ") "LL(#{items})" end