Decorator¶ ↑
DESCRIPTION:¶ ↑
the Decorator make a decorator like Python.
Usage¶ ↑
require 'decorator'
または
require 'decorator/only'
require ‘decorator’ だと Module#decorator だけでなく Module#kwargsable も一緒に使えます。require ‘decorator/only’ だと Module#decorator だけがロードされます
普通、このモジュールで使う関数はModule#decoratorのみです。それはデコレータを作成するデコレータです。デコレータを作る場合は通常これをデコレータとします。example:
class Module decorator def wrap func, *args, &blk puts "wrapped!" proc { func.call *args, &blk }
デコレータの第一引数は必ずMethodです。この場合のwrapはデコレータとして使用できます。
class TestClass wrap def wrapped *args, &blk puts "IN!"
もしデコレータに引数を渡した場合、それはすべてデコレータに一緒に渡されます。
class TestClass wrap(*example_args) def wrapped *args, &blk puts "IN!" => ↓のargsにexample_argsが渡される def wrap func, *args, &blk puts "wrapped!" proc { func.call *args, &blk }
デコレータの戻り値がProcである場合、関数はそのProcに置き換えられます。たとえばこの場合、wrappedはwrap内のprocに置き換えられます。