Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | Module |

概要

Module#<=> other -> bool | nil

詳細

self と other の敬称関係を比較する
self が other の先祖のクラス/モジュールの場合、 1 を返却
self が other と同一のクラス/モジュールの場合、 0 を返却
self が other の子孫のクラス/モジュールの場合、 -1 を返却
継承関係にないクラス同士の比較では nil を返却

サンプルコード
require 'tbpgr_utils'

module ParentModule
end

class ImplModuleClass
  include ParentModule
end

class ExtendedClass < ImplModuleClass;end

class LonelinessClass;end

bulk_puts_eval binding, <<-EOS
ImplModuleClass <=> ParentModule
ParentModule <=> ParentModule
ParentModule <=> ImplModuleClass
ExtendedClass <=> ImplModuleClass
ExtendedClass <=> ExtendedClass
ImplModuleClass <=> ExtendedClass
ExtendedClass <=> ParentModule
ParentModule <=> ExtendedClass
ParentModule <=> ParentModule
ParentModule <=> ParentModule
ParentModule <=> LonelinessClass
LonelinessClass <=> LonelinessClass
LonelinessClass <=> ParentModule
EOS

__END__
下記はTbpgrUtils gemの機能
bulk_puts_eval

https://rubygems.org/gems/tbpgr_utils
https://github.com/tbpgr/tbpgr_utils

出力

出力

ImplModuleClass <=> ParentModule    # => -1
ParentModule <=> ParentModule       # => 0
ParentModule <=> ImplModuleClass    # => 1
ExtendedClass <=> ImplModuleClass   # => -1
ExtendedClass <=> ExtendedClass     # => 0
ImplModuleClass <=> ExtendedClass   # => 1
ExtendedClass <=> ParentModule      # => -1
ParentModule <=> ExtendedClass      # => 1
ParentModule <=> ParentModule       # => 0
ParentModule <=> ParentModule       # => 0
ParentModule <=> LonelinessClass    # => nil
LonelinessClass <=> LonelinessClass # => 0
LonelinessClass <=> ParentModule    # => nil