Class: Rake::LinkedList
Relationships & Source Files | |
Namespace Children | |
Classes:
| |
Extension / Inclusion / Inheritance Descendants | |
Subclasses:
|
|
Super Chains via Extension / Inclusion / Inheritance | |
Instance Chain:
self,
Enumerable
|
|
Inherits: | Object |
Defined in: | lib/rake/linked_list.rb |
Overview
Polylithic linked list structure used to implement several data structures in ::Rake.
Constant Summary
Class Method Summary
-
.cons(head, tail)
Cons a new head onto the tail list.
-
.empty
The standard empty list class for the given
LinkedList
class. -
.make(*args)
Make a list out of the given arguments.
- .new(head, tail = EMPTY) ⇒ LinkedList constructor protected
Instance Attribute Summary
- #empty? ⇒ Boolean readonly
- #head readonly
- #tail readonly
Instance Method Summary
-
#==(other)
Lists are structurally equivalent.
-
#conj(item)
Polymorphically add a new element to the head of a list.
-
#each
For each item in the list.
-
#inspect
Same as #to_s, but with inspected items.
-
#to_s
Convert to string: LL(item, item…).
Constructor Details
.new(head, tail = EMPTY) ⇒ LinkedList
(protected)
Class Method Details
.cons(head, tail)
Cons a new head onto the tail list.
.empty
The standard empty list class for the given LinkedList
class.
# File 'lib/rake/linked_list.rb', line 78
def self.empty self::EMPTY end
.make(*args)
Make a list out of the given arguments. This method is polymorphic
# File '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
Instance Attribute Details
#empty? ⇒ Boolean
(readonly)
# File 'lib/rake/linked_list.rb', line 20
def empty? false end
#head (readonly)
[ GitHub ]# File 'lib/rake/linked_list.rb', line 8
attr_reader :head, :tail
#tail (readonly)
[ GitHub ]# File 'lib/rake/linked_list.rb', line 8
attr_reader :head, :tail
Instance Method Details
#==(other)
Lists are structurally equivalent.
#conj(item)
Polymorphically add a new element to the head of a list. The type of head node will be the same list type as the tail.
# File 'lib/rake/linked_list.rb', line 12
def conj(item) self.class.cons(item, self) end
#each
For each item in the list.
#inspect
Same as #to_s, but with inspected items.
# File 'lib/rake/linked_list.rb', line 42
def inspect items = map(&:inspect).join(", ") "LL(#{items})" end
#to_s
Convert to string: LL(item, item…)
# File 'lib/rake/linked_list.rb', line 36
def to_s items = map(&:to_s).join(", ") "LL(#{items})" end