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