落書きノート

ふと自分が気になった事を書いてます

Ruby資格技術者問題集

irb(main):001:0> class Foo
irb(main):002:1> def initialize(a)
irb(main):003:2> @a = a
irb(main):004:2> end
irb(main):005:1> def method1
irb(main):006:2> @a
irb(main):007:2> end
irb(main):008:1> end
=> :method1
irb(main):009:0> foo1 = Foo.new(1)
=> #<Foo:0x007fa79c82aaa0 @a=1>
irb(main):010:0> foo2 = Foo.new(2)
=> #<Foo:0x007fa79c81a1c8 @a=2>
irb(main):011:0> p foo1.method1
1
=> 1
irb(main):012:0> p foo2.method1
2
=> 2
irb(main):013:0> a = Foo
=> Foo
irb(main):014:0> a.new(1)
=> #<Foo:0x007fa79b0f1028 @a=1>
irb(main):015:0> Foo = 1
(irb):15: warning: already initialized constant Foo
(irb):1: warning: previous definition of Foo was here
=> 1
irb(main):016:0> p 1
1
=> 1
irb(main):017:0> class Hoge
irb(main):018:1> p 2
irb(main):019:1> end
2
=> 2
irb(main):020:0> p 3
3
=> 3
> irb
irb(main):001:0> class Foo
irb(main):002:1> def initialize(a)
irb(main):003:2> @a = a
irb(main):004:2> end
irb(main):005:1> def method1
irb(main):006:2> @a
irb(main):007:2> end
irb(main):008:1> end
=> :method1
irb(main):009:0> foo1 = Foo.new(1)
=> #<Foo:0x007fe71206fa58 @a=1>
irb(main):010:0> foo2 = Foo.new(2)
=> #<Foo:0x007fe71205f0b8 @a=2>
irb(main):011:0> foo1.class == Foo
=> true
irb(main):012:0> class FooExt < Foo
irb(main):013:1> def initialize(a,b)
irb(main):014:2> @b = b
irb(main):015:2> super a
irb(main):016:2> end
irb(main):017:1> def method2(c)
irb(main):018:2> @a + @b + c
irb(main):019:2> end
irb(main):020:1> end
=> :method2
irb(main):021:0> fooExt = FooExt.new(3,4)
=> #<FooExt:0x007fe712968c90 @b=4, @a=3>
irb(main):022:0> p fooExt.method1
3
=> 3
irb(main):023:0> p fooExt.method2(5)
12
=> 12
irb(main):024:0> FooExt.superclass == Foo
=> true

classの名前は定数で定義出来ます。また定数なので先頭文字が大文字でないとエラーとなります。superは括弧と引数を付けずに実行すると、メソッドが受け取った引数をそのままスーパークラスの同名メソッドに渡して実行します。また、任意のメソッドも実行できます。