Closures (iterators and proc) are dynamically allocated at run-time with an address on the heap. At compile-time this is unknown and would differ depending on Linux, Windows, Mac. If you have enough info to construct your closure at compile-time, use a macro or template to generate an inline iterator or normal proc instead.
Methods are used for dispatching on run-time types, if your run-time type is already known at compile-time, you can use a normal proc instead of a method.
