Class: Lisp::Symbol

Inherits:
Atom show all
Defined in:
lib/rubylisp/symbol.rb

Instance Attribute Summary

Attributes inherited from Atom

#value

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Atom

#all?, #apply_to, #car, #cdr, #character?, #class?, #copy, #doc, #environment?, #eof_object?, #eq?, #equal?, #eqv?, #false?, #frame?, #function?, #length, #lisp_object?, #list?, #macro?, #negative?, #number?, #object?, #pair?, #port?, #positive?, #primitive?, #print_string, #quoted, #set!, #set_location, #special?, #string?, #true?, #vector?, #zero?

Constructor Details

#initialize(n) ⇒ Symbol

Returns a new instance of Symbol.



14
15
16
17
# File 'lib/rubylisp/symbol.rb', line 14

def initialize(n)
  @value = n
  @naked = (n[-1] == ?:)
end

Class Method Details

.named(n) ⇒ Object



5
6
7
8
9
10
11
12
# File 'lib/rubylisp/symbol.rb', line 5

def self.named(n)
  name = n.to_s
  @@symbols ||= {}
  return @@symbols[n] if @@symbols.has_key?(n)
  s = self.new(n)
  @@symbols[n] = s
  s
end

Instance Method Details

#evaluate(env) ⇒ Object



40
41
42
43
44
# File 'lib/rubylisp/symbol.rb', line 40

def evaluate(env)
  super
  return self if @naked
  env.value_of(self)
end

#naked?Boolean

Returns:



32
33
34
# File 'lib/rubylisp/symbol.rb', line 32

def naked?
  @naked
end

#nameObject



24
25
26
# File 'lib/rubylisp/symbol.rb', line 24

def name
  @value
end

#symbol?Boolean

Returns:



28
29
30
# File 'lib/rubylisp/symbol.rb', line 28

def symbol?
  true
end

#to_nakedObject



19
20
21
# File 'lib/rubylisp/symbol.rb', line 19

def to_naked
  Lisp::Symbol.named("#{@value}:")
end

#to_sObject



46
47
48
# File 'lib/rubylisp/symbol.rb', line 46

def to_s
  @value
end

#to_symObject



50
51
52
# File 'lib/rubylisp/symbol.rb', line 50

def to_sym
  @value.to_sym
end

#typeObject



36
37
38
# File 'lib/rubylisp/symbol.rb', line 36

def type
  :symbol
end