Feature #12957

A more OO way to create lambda Procs

Currently to create a lambda Proc one has to use lambda { } or -> { }. For doing metaprogramming it would be nice to have a more OO way to generate them. Something like LambdaProc.new. That way one could write:

classMetaThingydefinitializeproc_class@anonymous_function=proc_class.newdo# Some Codeendendend

and pass in either Proc or LambdaProc depending on their needs, instead of:

classMetaThingydefinitializeproc_type@anonymous_function=caseproc_typewhen:procprocdo# Some Codeendwhen:lambdalambdado# Some Codeendendendendend

This is not a common use case, but would help make the language more orthogonal.

Problem is, when you allow LambdaProc.new, that have to accept non-lambda procs, like LambdaProc.new(&nonlambda). This way, a proc would be converted from/between lambda and non-lambda.

This is not a good idea. Right now a lambda is born to be a lambda and there is no way to turn it into a proc. If such property breaks, a programmer cannot guarantee what to expect to a block they wrote's parameter, because that proc can later be changed into a lambda by someone else. And there is no way to detect such change from that block itself before it is called.