yaotti's diary

Software is Eating the World

名前空間

変数とメソッドは違うらしい

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
a=1
def a
  puts "hello"
end

p a  #=>1
a    #=>何もなし
a()  #=>hello

p a.class    #=>Fixnum
p a().class  #=>hello NilClass

と思ったけど,a=1のaはFixnumクラスのオブジェクトなんだな.
一番外で定義するとNilClassのメソッドになるらしい.
そうやって名前空間を区別してるからa=1とdef a ...が区別されるのか.

関数=NilClassのメソッドで,Rubyには関数はない,と言えるかも.

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-
func=1
def func
  puts "Hello"
end
func

これは何が印字されるでしょう,とか.
同じ名前がメソッドとオブジェクトであると,後者が優先されるらしい.