Rubyの言語仕様で重要なものをピックアップ。
Class
RubyではClassはClassオブジェクトとして定義されている。
::new #allocate #inherited #new #superclass
インスタンス化に関係する
::new, #new, #allocate
と継承に関係する
#superclass, #inhereted
しか定義されていない。
その他のメソッドはすべてスーパークラスであるModuleに定義されている。Classはインスタンス化できるModuleと考えれば良い。
SuperClassの関係
[1] pry(main)> Class.superclass
=> Module
[2] pry(main)> Module.superclass
=> Object
[3] pry(main)> Object.superclass
=> BasicObject
[4] pry(main)> BasicObject.superclass
=> nil
[5] pry(main)> nil.superclass
NoMethodError: undefined method `superclass' for nil:NilClass
[6] pry(main)> NilClass.superclass
=> Object
Classの関係
[1] pry(main)> Class.class
=> Class
[2] pry(main)> Module.class
=> Class
[3] pry(main)> Object.class
=> Class
[4] pry(main)> BasicObject.class
=> Class
[5] pry(main)> nil.class
=> NilClass
[6] pry(main)> NilClass.class
=> Class
Moduleも含めた祖先
[1] pry(main)> Class.ancestors
=> [Class, Module, Object, PP::ObjectMixin, Kernel, BasicObject]
ここで、PP::ObjectMixin
はpry
が出力の整形用に勝手に突っ込んだもの。通常は入っていない。
irb(main):001:0> Class.ancestors
=> [Class, Module, Object, Kernel, BasicObject]
Module
::constants ::nesting ::new #< #<= #<=> #== #=== #> #>= #alias_method #ancestors #append_features #attr #attr_accessor #attr_reader #attr_writer #autoload #autoload? #class_eval #class_exec #class_variable_defined? #class_variable_get #class_variable_set #class_variables #const_defined? #const_get #const_missing #const_set #constants #define_method #extend_object #extended #freeze #include #include? #included #included_modules #instance_method #instance_methods #method_added #method_defined? #method_removed #method_undefined #module_eval #module_exec #module_function #name #private #private_class_method #private_instance_methods #private_method_defined? #protected #protected_instance_methods #protected_method_defined? #public #public_class_method #public_instance_method #public_instance_methods #public_method_defined? #remove_class_variable #remove_const #remove_method #to_s #undef_method
基本機能
- 比較関係
#< #<= #<=> #== #=== #> #>=
- 文字列化
#name #to_s
- freeze
#freeze
Constants関係
::constants ::nesting #const_defined? #const_get #const_missing #const_set #constants #remove_const
Module機能
::new #ancestors
- autoload
#autoload #autoload?
- include
#append_features #include #include? #included #included_modules
- extend
#extend_object #extended
Class関係
- class_variables (
@@foo
etc.)
#class_variable_defined? #class_variable_get #class_variable_set #class_variables #remove_class_variable
- methods
#alias_method #define_method #method_added #method_defined? #method_removed #method_undefined #remove_method #undef_method
#instance_methods
#module_function
- attr
#attr #attr_accessor #attr_reader #attr_writer
- eval, exec
#class_eval #class_exec #module_eval #module_exec
private,protected,publicのスコープ概念の導入
#private #private_class_method #private_instance_methods #private_method_defined?
#protected #protected_instance_methods #protected_method_defined?
#public #public_class_method #public_instance_method #public_instance_methods #public_method_defined?
Object
#!~ #<=> #=== #=~ #class #clone #define_singleton_method #display #dup #enum_for #eql? #extend #freeze #frozen? #hash #inspect #instance_of? #instance_variable_defined? #instance_variable_get #instance_variable_set #instance_variables #is_a? #kind_of? #method #nil? #object_id #public_method #public_send #remove_instance_variable #respond_to? #respond_to_missing? #send #singleton_class #singleton_methods #taint #tainted? #tap #to_enum #to_s #trust #untaint #untrust #untrusted?
基本機能
- 比較関係
#!~ #<=> #=== #=~ #eql? #nil?
- 文字列化
#to_s #inspect
- Enum関係
#enum_for #to_enum #tap
- copy
#clone #dup
- Hash値, Object値
#hash #object_id
- display
#display
- freeze
#freeze #frozen?
- マーク付け
#taint #tainted? #untaint
#trust #untrust #untrusted?
Instance機能
- classとの関係性チェック
#instance_of? #is_a? #kind_of? #class
- instance_valiable (
@foo
etc.)
#instance_variable_defined? #instance_variable_get #instance_variable_set #instance_variables #remove_instance_variable
- method check
#method #public_method
#respond_to? #respond_to_missing?
- method call
#send #public_send
- extend
#extend
- singleton_method、singleton_class
#define_singleton_method #singleton_class #singleton_methods
これは日本語では特異メソッド、特異クラスと呼ばれている。これの解説は以下がわかり易かった。
結局、Rubyの特異メソッドって何なの? - (゚∀゚)o彡 sasata299's blog
これを読めば、class << self
とかの意味もわかるはず!
BasicObject
すべてオブジェクトで共通で使える、Objectの親に当たるクラス。Kernelモジュールがincludeされていないのが特徴。
::new #! #!= #== #__id__ #__send__ #equal? #instance_eval #instance_exec #method_missing #singleton_method_added #singleton_method_removed #singleton_method_undefined
- 比較関係
#! #!= #== #equal?
- eval, exec
#instance_eval #instance_exec
- method_missing
#method_missing
- singleton_methodのチェック関係
#singleton_method_added #singleton_method_removed #singleton_method_undefined
- その他
::new
#__id__
#__send__
Kernel
open, system, eval, exit, raise, putsなどのprint系関数, Array, Integer, Stringなどのキャストのような関数など、一般的な言語でメソッドではなく関数として定義されているような、基本的な動作が定義されているモジュール。
ここに定義されているすべてのメソッドは一度見ておくと良さそう。
Proc/Method
http://www.ruby-doc.org/core-1.9.3/Proc.html
http://www.ruby-doc.org/core-1.9.3/Method.html
binding
(束縛変数)を持つProcと、receiver
を持つMethod。Blockを使う時なんかにも必要なので、理解しておくと良い。
Proc/Method, block/proc/lambdaの違いについては以下がわかり易かった。
Ruby の Proc オブジェクトと Method オブジェクトの違い (proc, lambda, ブロック, メソッドについて) - vivid memo
その他、基本型
String/Symbol
Number/Math
- http://www.ruby-doc.org/core-1.9.3/Fixnum.html
- http://www.ruby-doc.org/core-1.9.3/Bignum.html
- http://www.ruby-doc.org/core-1.9.3/Integer.html
- http://www.ruby-doc.org/core-1.9.3/Float.html
- http://www.ruby-doc.org/core-1.9.3/Rational.html
- http://www.ruby-doc.org/core-1.9.3/Complex.html
- http://www.ruby-doc.org/core-1.9.3/Numeric.html
- http://www.ruby-doc.org/core-1.9.3/Math.html
Boolean
- http://www.ruby-doc.org/core-1.9.3/TrueClass.html
- http://www.ruby-doc.org/core-1.9.3/FalseClass.html
集合関係
- http://www.ruby-doc.org/core-1.9.3/Enumerable.html
- http://www.ruby-doc.org/core-1.9.3/Range.html
- http://www.ruby-doc.org/core-1.9.3/Array.html
- http://www.ruby-doc.org/core-1.9.3/Hash.html
- http://www.ruby-doc.org/stdlib-1.9.3/libdoc/set/rdoc/Set.html
Time/Date