はじめに
移植やってます。
( from python 3.7 to ruby 2.7 )
wrap (Python)
以前の記事で、概ねwrap
を表現できるようになりましたが、
module
とclass
間ですと、NoMethodError
になります。
失敗 (Ruby)
module M
def my_decorator(meth)
orig = method(meth)
define_method(meth) do |*args, **kwargs|
puts "Calling decorated method"
orig.call(*args, **kwargs)
end
end
end
class A
include M
def example
def _example
puts "Called decorated method"
end
my_decorator(:_example)
_example
end
end
a = A.new
a.example
# output
undefined method `define_method'
ぐぬぬ。
しかし、Did you mean?
さんがdefine_singleton_method
を教えてくれました。
成功 (Ruby)
module M
def my_decorator(meth)
orig = method(meth)
- define_method(meth) do |*args, **kwargs|
+ define_singleton_method(meth) do |*args, **kwargs|
puts "Calling decorated method"
orig.call(*args, **kwargs)
end
end
end
class A
include M
def example
def _example
puts "Called decorated method"
end
my_decorator(:_example)
_example
end
end
a = A.new
a.example
# output
Calling decorated method
Called decorated method
分かりやすい記事
メモ
- Python の wraps の2 を学習した
- 百里を行く者は九十里を半ばとす