Skip to content

Instantly share code, notes, and snippets.

@tsnow
Last active August 29, 2015 14:05
Show Gist options
  • Save tsnow/29b71d24a0a69cda7d15 to your computer and use it in GitHub Desktop.
Save tsnow/29b71d24a0a69cda7d15 to your computer and use it in GitHub Desktop.
"Ruby keywords can have methods called on them?" No. But sometimes they return values.

Keyword list in Ruby: http://ruby-doc.org/docs/keywords/1.9/

% for i in BEGIN   END   __ENCODING__   __END__   __FILE__   __LINE__   
alias   and   begin   break   case   class   def   defined\?   do   else   elsif   end   ensure   false   for   
if   in   module   next   nil   not   or   redo   rescue   retry   return   self   super   then   true   undef   unless   
until   when   while   yield  ;

do 
echo $i; 
ruby -e "puts $i.methods.length"; 
done
BEGIN
-e:1: syntax error, unexpected keyword_BEGIN
puts BEGIN.methods.length
          ^
END
-e:1: syntax error, unexpected keyword_END
puts END.methods.length
        ^
__ENCODING__
60
__END__
-e:1:in `<main>': undefined local variable or method `__END__' for main:Object (NameError)
__FILE__
161
__LINE__
128
alias
-e:1: syntax error, unexpected keyword_alias
puts alias.methods.length
          ^
and
-e:1: syntax error, unexpected '.'
puts and.methods.length
         ^
begin
-e:1: syntax error, unexpected '.'
puts begin.methods.length
           ^
-e:1: syntax error, unexpected end-of-input, expecting keyword_end
break
-e:1: void value expression
puts break.methods.length
           ^
case
-e:1: syntax error, unexpected '.', expecting keyword_when
puts case.methods.length
          ^
class
-e:1: syntax error, unexpected '.'
puts class.methods.length
           ^
def
-e:1: syntax error, unexpected '.'
puts def.methods.length
         ^
defined?
-e:1: syntax error, unexpected '.'
puts defined?.methods.length
              ^
do
-e:1: syntax error, unexpected '.'
puts do.methods.length
        ^
-e:1: syntax error, unexpected end-of-input, expecting keyword_end
else
-e:1: syntax error, unexpected keyword_else, expecting end-of-input
puts else.methods.length
         ^

elsif
-e:1: syntax error, unexpected keyword_elsif, expecting end-of-input
puts elsif.methods.length
          ^
end
-e:1: syntax error, unexpected keyword_end, expecting end-of-input
puts end.methods.length
        ^
ensure
-e:1: syntax error, unexpected keyword_ensure, expecting end-of-input
puts ensure.methods.length
           ^
false
57
for
-e:1: syntax error, unexpected '.'
puts for.methods.length
         ^
if
-e:1: syntax error, unexpected '.'
puts if.methods.length
        ^
in
-e:1: syntax error, unexpected keyword_in, expecting end-of-input
puts in.methods.length
       ^
module
-e:1: syntax error, unexpected '.'
puts module.methods.length
            ^
next
-e:1: void value expression
puts next.methods.length
          ^
nil
64
not
-e:1: syntax error, unexpected '.', expecting '('
puts not.methods.length
         ^
or
-e:1: syntax error, unexpected '.'
puts or.methods.length
        ^
redo
-e:1: void value expression
puts redo.methods.length
          ^
rescue
-e:1: syntax error, unexpected '.'
puts rescue.methods.length
            ^
retry
-e:1: void value expression
puts retry.methods.length
           ^
return
-e:1: void value expression
puts return.methods.length
            ^
self
54
super
-e:1:in `<main>': super called outside of method (NoMethodError)
then
-e:1: syntax error, unexpected keyword_then, expecting end-of-input
puts then.methods.length
         ^
true
57
undef
-e:1: syntax error, unexpected keyword_undef
puts undef.methods.length
          ^
unless
-e:1: syntax error, unexpected '.'
puts unless.methods.length
            ^
until
-e:1: syntax error, unexpected '.'
puts until.methods.length
           ^
when
-e:1: syntax error, unexpected keyword_when, expecting end-of-input
puts when.methods.length
         ^
while
-e:1: syntax error, unexpected '.'
puts while.methods.length
           ^
yield
-e:1:in `<main>': no block given (yield) (LocalJumpError)

Self

Anything prepended with self. is seen as a method.

% for i in BEGIN   END   __ENCODING__   
__END__   __FILE__   __LINE__   alias   and   begin   break   case   
class   def   defined\?   do   else   elsif   end   ensure   
false   for   if   in   module   next   nil   not   or   redo   
rescue   retry   return   self   super   then   true   undef   
unless   until   when   while   yield  ; 
do 
echo $i; 
ruby -e "puts self.$i.methods.length"; 
done
BEGIN
-e:1:in `<main>': undefined method `BEGIN' for main:Object (NoMethodError)
END
-e:1:in `<main>': undefined method `END' for main:Object (NoMethodError)
__ENCODING__
-e:1:in `<main>': undefined method `__ENCODING__' for main:Object (NoMethodError)
__END__
-e:1:in `<main>': undefined method `__END__' for main:Object (NoMethodError)
__FILE__
-e:1:in `<main>': undefined method `__FILE__' for main:Object (NoMethodError)
__LINE__
-e:1:in `<main>': undefined method `__LINE__' for main:Object (NoMethodError)
alias
-e:1:in `<main>': undefined method `alias' for main:Object (NoMethodError)
and
-e:1:in `<main>': undefined method `and' for main:Object (NoMethodError)
begin
-e:1:in `<main>': undefined method `begin' for main:Object (NoMethodError)
break
-e:1:in `<main>': undefined method `break' for main:Object (NoMethodError)
case
-e:1:in `<main>': undefined method `case' for main:Object (NoMethodError)
class
95
def
-e:1:in `<main>': undefined method `def' for main:Object (NoMethodError)
defined?
-e:1:in `<main>': undefined method `defined?' for main:Object (NoMethodError)
do
-e:1:in `<main>': undefined method `do' for main:Object (NoMethodError)
else
-e:1:in `<main>': undefined method `else' for main:Object (NoMethodError)
elsif
-e:1:in `<main>': undefined method `elsif' for main:Object (NoMethodError)
end
-e:1:in `<main>': undefined method `end' for main:Object (NoMethodError)
ensure
-e:1:in `<main>': undefined method `ensure' for main:Object (NoMethodError)
false
-e:1:in `<main>': undefined method `false' for main:Object (NoMethodError)
for
-e:1:in `<main>': undefined method `for' for main:Object (NoMethodError)
if
-e:1:in `<main>': undefined method `if' for main:Object (NoMethodError)
in
-e:1:in `<main>': undefined method `in' for main:Object (NoMethodError)
module
-e:1:in `<main>': undefined method `module' for main:Object (NoMethodError)
next
-e:1:in `<main>': undefined method `next' for main:Object (NoMethodError)
nil
-e:1:in `<main>': undefined method `nil' for main:Object (NoMethodError)
not
-e:1:in `<main>': undefined method `not' for main:Object (NoMethodError)
or
-e:1:in `<main>': undefined method `or' for main:Object (NoMethodError)
redo
-e:1:in `<main>': undefined method `redo' for main:Object (NoMethodError)
rescue
-e:1:in `<main>': undefined method `rescue' for main:Object (NoMethodError)
retry
-e:1:in `<main>': undefined method `retry' for main:Object (NoMethodError)
return
-e:1:in `<main>': undefined method `return' for main:Object (NoMethodError)
self
-e:1:in `<main>': undefined method `self' for main:Object (NoMethodError)
super
-e:1:in `<main>': undefined method `super' for main:Object (NoMethodError)
then
-e:1:in `<main>': undefined method `then' for main:Object (NoMethodError)
true
-e:1:in `<main>': undefined method `true' for main:Object (NoMethodError)
undef
-e:1:in `<main>': undefined method `undef' for main:Object (NoMethodError)
unless
-e:1:in `<main>': undefined method `unless' for main:Object (NoMethodError)
until
-e:1:in `<main>': undefined method `until' for main:Object (NoMethodError)
when
-e:1:in `<main>': undefined method `when' for main:Object (NoMethodError)
while
-e:1:in `<main>': undefined method `while' for main:Object (NoMethodError)
yield
-e:1:in `<main>': undefined method `yield' for main:Object (NoMethodError)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment