0
0

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 3 years have passed since last update.

【Ruby】レシーバの型を簡単に取得するメソッド .class

Posted at

個人メモです。

レシーバのクラス(型)を参照する、classおよび、親のクラスを確認するsuperclass

またBasicObjectについても。

##目次

  1. .class
  2. .superclass
  3. .BasicObject

##1 .class

.classメソッドを使うと、レシーバのクラス(型)を簡単に取得することができる。

x = 100

x.class 
=> Integer
str = "text"

str.class
=> String
obj = {:a=>1, :b=>2, :c=>3}

obj.class
=> Hash
arr = [1, 2, 3]

arr.class
=> Array
nil.class
=> NilClass
(1..4).class
=> Range
(1.23).class
=> Float
Class.class
=> Class

Classは名前のないクラス。メタクラスと呼ぶ。
class クラス名 endで生成するクラスはこのClassを持っている。

class TestClass
  def hello
    msg = "test class"
    p "hello #{msg}"
  end
end

TestClass.class
=> Class
Kernel.class
=> Module

Kernelはすべてのクラスから参照できるメソッドを定義しているモジュール。

module TestModule
  def helloModule
    p "hello Module"
  end
end

TestModule.class
=> Module

##2 .superclass superclassメソッドを使うとスーパークラスを参照することができる。

数値、文字列、配列、ハッシュ、nil、moduleなどの要素に対しては使えない。

classメソッドで取得した型に対してなら使用できる。

###スーパークラスとは?
親クラスのことをスーパークラスと呼ぶ。

class AAA
end

#クラスAAAを継承
class BBB < AAA
end

上記のようにクラスを継承した場合、親となるクラスAAAがスーパークラスとなる。

BBBをサブクラスと呼ぶ。

class サブクラス名 < スーパークラス名

###Numericの場合

100.class
=> Integer

100.class.superclass
=> Numeric

100.class.superclass.superclass
=> Object

100.class.superclass.superclass.superclass
=> BasicObject

100.class.superclass.superclass.superclass.superclass
=> nil

IntegerのsuperclassはNumeric。
NumericのsuperclassはObject。

#数値に使うとエラー
100.superclass
NoMethodError (undefined method `superclass' for 100:Integer)

###classの場合
class Aaa
end

Aaa.class
=> Class

Aaa.superclass
=> Object

ClassのsuperclassはObjectが返る。

###継承した場合

class Aaa
end

class Bbb < Aaa
end

BBB.superclass
=> Aaa

###moduleの場合
moduleに対してsuperclassは使えない。

module Xxx
end

Xxx.class
=> Module

Xxx.superclass
=> NoMethodError (undefined method 'superclass' for Xxx:Module)

##3 .BasicObject BasicObjectとはクラスの最上位概念。 クラスの識別やメソッド呼び出しなど必要最低限の機能を持ったクラスのこと。
クラスの階層構造
BasicObject
↓
Object
↓
String, Numeric, Module, Class,,,
            ↓
     Integer, Floot

RubyではすべてのデータをObjectと呼び、その下に文字列のStringや数値のNumericなどのくくりがある。

上にいくほどより抽象的でシンプルな定義になる。 BasciObjectはその際たるクラス。


BasicObjectのスーパークラスはnilとなる。
 BasicObject.superclass
=> nil
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?