rubyで遊ぼう クラス

newメソッドを呼び出すと、インスタンス.initialize(name)が実行されます。

class Robot
	def initialize(name)
		@name = name
		@x = @y = 0
	end

	def move(x, y)
		@x += x; @y += y
	end

	def to_s
		"#{@name}: #{@x},#{@y}"
	end
end

robo1 = Robot.new("ロボ1号")
robo2 = Robot.new("ロボ2号")
puts robo1
robo2.move(10, 20)
puts robo2
C:\rails>ruby test.rb
ロボ1号: 0,0
ロボ2号: 10,20

おなじみメソッド制限です。
public:メソッドはどこからでも呼び出せる
private:同じクラス、サブクラス内のメソッドの中だけで呼び出せる

class Robot
	def initialize(name)
		@name = name
		@x = @y = 0
	end

	def move(x, y)
		@x += x; @y += y
		crash if @x < -100 || @x > 100 || @y < -100 || @y > 100
	end

	def to_s
		"#{@name}: #{@x},#{@y}"
	end

	private
	def crash
		puts "ズコーン!"
	end
end

robo1 = Robot.new("ロボ1号")
puts robo1
robo1.move(20, 20)
puts robo1
robo1.move(40, 40)
puts robo1
robo1.move(50, 20)
puts robo1
robo1.crash
C:\rails>ruby test.rb
ロボ1号: 0,0
ロボ1号: 20,20
ロボ1号: 60,60
ズコーン!
ロボ1号: 110,80
test.rb:30:in `
': private method `crash' called for # (NoMethodError)