sample.rb
class Person
attr_accessor :from
def self.lefty(name,age)
#メソッド名の頭に self. をつけるとクラスメソッドになる。
new(name,age,"左")
#newすることでinitializeメソッド呼び出し
end
class << self
#複数のメソッドをクラスメソッドにする方法
def second_method
puts "second"
end
def third_method
puts "third"
end
end
def initialize (name,age,foot)
#new メソッド使った時に使用
@name = name
@age = age
@foot = foot
end
def sayHello
puts "私は #{@name}です。 #{@age}歳です。 利き足は #{@foot}です。"
#ここで使っている@name,@age,@footはinitializeで定義したものを使っている。
end
def sayFrom
if @from != nil
puts "私は #{@name}です。 #{@age}歳です。#{@from}出身です。"
#ここで使っている@fromはattr_accessorの:fromに格納された値を使う。(インスタンス変数)
#ちなみに @from 部分を from に書き直してもしっかり出力される
else
puts "私は #{@name}です。 #{@age}歳です。"
end
end
end
person1 = Person.lefty("中村",27)
#クラスメソッドを使用
person1.sayHello
person2 = Person.new("中田",29,"右")
#単純に new
#initializeメソッドの処理でインスタンス変数に引数を突っ込む
person2.sayHello
person3 = Person.new("小野",26,"右")
#単純に new
person3.from = "静岡"
# さらにattr_accessor:fromに静岡をセット=>@from
person3.sayHello
person3.sayFrom
puts person3.from #=>"静岡"
#puts person3.name #=>出力エラー
#解決方法=> attr_accessor に :name を追加
#追加後、=>小野
#foo = Foo.new
#foo.first_method
#foo.second_method
#上記のようにオブジェクトを生成した後にクラスメソッドを呼び出すことは不可能
出力結果
私は 中村です。 27歳です。 利き足は 左です。
私は 中田です。 29歳です。 利き足は 右です。
私は 小野です。 26歳です。 利き足は 右です。
私は 小野です。 26歳です。静岡出身です。
静岡