■ 定数の値を取得する
class HasConstant
CONST_VARIABLE = 1
end
p HasConstant.const_get :CONST_VARIABLE
HasConstant.const_get :UNDEFINED_CONST_VARIABLE
1
NameError: uninitialized constant HasConstant::UNDEFINED_CONST_VARIABLE
<main>:5:in `const_get'
<main>:5:in `<main>'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/backend.rb:44:in `eval'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/backend.rb:44:in `eval'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/backend.rb:12:in `eval'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/kernel.rb:90:in `execute_request'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/kernel.rb:49:in `dispatch'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/kernel.rb:38:in `run'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/command.rb:110:in `run_kernel'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/command.rb:40:in `run'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/bin/iruby:5:in `<top (required)>'
/home/aki/.rbenv/versions/2.7.1/bin/iruby:23:in `load'
/home/aki/.rbenv/versions/2.7.1/bin/iruby:23:in `<main>'
HasConstant.const_get :not_const_variable
NameError: wrong constant name not_const_variable
<main>:in `const_get'
<main>:in `<main>'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/backend.rb:44:in `eval'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/backend.rb:44:in `eval'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/backend.rb:12:in `eval'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/kernel.rb:90:in `execute_request'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/kernel.rb:49:in `dispatch'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/kernel.rb:38:in `run'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/command.rb:110:in `run_kernel'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/lib/iruby/command.rb:40:in `run'
/home/aki/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/iruby-0.4.0/bin/iruby:5:in `<top (required)>'
/home/aki/.rbenv/versions/2.7.1/bin/iruby:23:in `load'
/home/aki/.rbenv/versions/2.7.1/bin/iruby:23:in `<main>'
■ クラスに新たな定数を設定する
class BlankClass
end
p BlankClass.constants
p BlankClass.const_set :CONST_VAR, 1
p BlankClass.constants
p BlankClass.const_get :CONST_VAR
p BlankClass.const_set :CONST_VAR, 2
p BlankClass.constants
BlankClass.const_get :CONST_VAR
[] 1 [:CONST_VAR] 1
<main>:8: warning: already initialized constant BlankClass::CONST_VAR <main>:4: warning: previous definition of CONST_VAR was here
2 [:CONST_VAR]
2
class ParentClass
def super_public_method; end
private
def super_private_method; end
protected
def super_protected_method; end
end
class ChildClass < ParentClass
def public_method; end
private
def private_method; end
protected
def protected_method; end
end
:protected_method
ChildClass.instance_methods
[:public_method, :protected_method, :super_public_method, :super_protected_method, :to_json, :dup, :itself, :yield_self, :then, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :frozen?, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :singleton_class, :clone, :display, :class, :hash, :public_send, :method, :singleton_method, :define_singleton_method, :extend, :to_enum, :enum_for, :<=>, :===, :=~, :!~, :nil?, :eql?, :respond_to?, :freeze, :inspect, :object_id, :send, :to_s, :__send__, :!, :==, :!=, :equal?, :__id__, :instance_eval, :instance_exec]
ChildClass.public_instance_methods
[:public_method, :super_public_method, :to_json, :dup, :itself, :yield_self, :then, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :frozen?, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :remove_instance_variable, :instance_of?, :kind_of?, :is_a?, :tap, :singleton_class, :clone, :display, :class, :hash, :public_send, :method, :singleton_method, :define_singleton_method, :extend, :to_enum, :enum_for, :<=>, :===, :=~, :!~, :nil?, :eql?, :respond_to?, :freeze, :inspect, :object_id, :send, :to_s, :__send__, :!, :==, :!=, :equal?, :__id__, :instance_eval, :instance_exec]
ChildClass.private_instance_methods
[:private_method, :super_private_method, :DelegateClass, :Digest, :sprintf, :format, :Integer, :Float, :String, :Array, :Hash, :local_variables, :srand, :p, :trap, :warn, :rand, :system, :spawn, :raise, :fail, :global_variables, :__method__, :__callee__, :__dir__, :autoload, :require, :require_relative, :binding, :eval, :iterator?, :block_given?, :catch, :throw, :loop, :autoload?, :jj, :exec, :exit!, :abort, :URI, :trace_var, :untrace_var, :at_exit, :gem, :`, :JSON, :select, :j, :Rational, :Complex, :respond_to_missing?, :Pathname, :caller, :caller_locations, :test, :gets, :proc, :lambda, :fork, :initialize_copy, :initialize_clone, :initialize_dup, :exit, :set_trace_func, :gem_original_require, :sleep, :pp, :load, :syscall, :open, :printf, :print, :putc, :puts, :readline, :readlines, :initialize, :method_missing, :singleton_method_added, :singleton_method_removed, :singleton_method_undefined]
ChildClass.protected_instance_methods
[:protected_method, :super_protected_method]
p ChildClass.method_defined? :public_method
p ChildClass.method_defined? :private_method
ChildClass.method_defined? :protected_method
true false
true
ChildClass.private_method_defined? :private_method
true
次回は 「10-2-3 クラスの継承構造を調べる」から