3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

classを使わずにクラスを定義する

Posted at

Ruby 2.3.1 で動作確認

Ruby におけるクラスは Class クラスのインスタンスです。
つまり、 Class.new を活用すれば、class 構文使わなくてもクラス作れるんじゃね?と思いついたので、class 構文を使わずにクラスをつくってみることにした。

普通にクラスを定義する

今回作るクラスは以下の通り。なんとも味気ない……

class Dog

  def initialize
    @age = 1
  end

  def bow
    puts("bow")
  end
end

このクラスを、class 構文を使わずに定義し、インスタンスを作成する。

Class クラスをインスタンス化し、定数に格納する。

Dog = Class.new do |clazz|

  def initialize
    @age = 1
  end

  def bow
    puts("bow")
  end
end

# 動作確認
dog = Dog.new
dog.bow

class DogDog = Class.new do |clazz| になっただけだが、この変化は非常に重要な意味を持つ。Class クラスのnew は、引数にブロックを受け取る。つまり、上から順に処理が実行されていく。

C++ からruby に移ってきた時の私は、

class Sample
  puts("Hello ruby")
end

が、なんで問題なく動くのか疑問だったが、上記で納得した。

参考にした書籍など

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?