ruby 动的に方法を追加する模块
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby 动的に方法を追加する模块相关的知识,希望对你有一定的参考价值。
##
# include method module
# @author tatsunori nishikori
module IncludeMethod
##
# include other instance method
# @note 他のインスタンスのメソッドの一部を自分自身のクラスに動的に追加します
# @param [Object] instance 追加したいメソッドが有るインスタンス
# @param [Array] method_names メソッド名(symbol)
def include_instance_method(instance, method_names)
@instance = instance
method_names.each do |method_name|
self.class.class_eval <<-EOS, __FILE__, __LINE__ + 1
def #{method_name}(*args)
@instance.send(:#{method_name}, *args)
end
EOS
end
end
##
# 動的に自インスタンスのメソッドを削除
# @param [Array] method_names メソッド名(symbol)
def remove_instance_method(method_names)
method_names.each do |method_name|
if self.class.method_defined?(method_name)
self.class.class_eval { remove_method method_name }
end
end
end
##
# 動的にアクセサメソッド等が追加出来るメソッド
# @param [Array] funcs
# @example dynamic_include_attr_method([ def agree; p 'Hello'; end ])
def dynamic_include_attr_method(funcs)
funcs.each do |func|
self.class.class_eval { func }
end
end
##
# hashを動的にattr_readerとして追加し、初期値をセットする
# @param [Hash] hash
# @example hash_to_attr_reader_method({ name: 'Bob', age: 31, sex: 1 })
def hash_to_attr_reader_method(hash)
hash.each do |k, v|
self.class.class_eval <<-EOS, __FILE__, __LINE__ + 1
attr_reader :#{k}
EOS
self.instance_variable_set("@#{k}".to_sym, v)
end
end
end
以上是关于ruby 动的に方法を追加する模块的主要内容,如果未能解决你的问题,请参考以下文章
csharp DIできる状态で,动的にオブジェクトを生成する(普通にGameObject.Instantiateすると,生成されたオブジェクトにはDIされない))
markdown ActiveRecord的にデフォルト値を设定する
markdown ActiveRecord的地方の句の条件を动的にしたい
sh GitHub的にローカルレポジトリを登录する
sh とりあえず外部への通信を定期的に确认する
sql MySQL的SQLでの外部キー制约を一时的に无效にする