Issue #6389 has been reported by usa (Usaku NAKAMURA).

----------------------------------------
Bug #6389: Should be able to `return' and `break' from callback method of plain DL?
https://bugs.ruby-lang.org/issues/6389

Author: usa (Usaku NAKAMURA)
Status: Assigned
Priority: Normal
Assignee: tenderlovemaking (Aaron Patterson)
Category: ext
Target version: 1.9.3
ruby -v: -


IRCで笹田さんと話をしていて発見したのですが、fiddleありだと
DLのコールバックメソッドからreturnやbreakが可能ですが、なしだと
LocalJumpErrorが発生します。

私の見解としては、returnできた方がうれしい気がしています。
が、いずれにせよ、挙動を揃えた方がいいのではないかと思います。
どう思いますか?>Aaronさん

以下、素のDLでもreturnできるようにするパッチです。

Index: ext/dl/lib/dl/func.rb
===================================================================
--- ext/dl/lib/dl/func.rb	(リビジョン 35505)
+++ ext/dl/lib/dl/func.rb	(作業コピー)
@@ -90,6 +90,9 @@ module DL
         if( !block )
           raise(RuntimeError, "block must be given.")
         end
+        unless block.lambda?
+          block = Class.new{define_method(:call, block)}.new.method(:call)
+        end
         if( @cfunc.ptr == 0 )
           cb = Proc.new{|*args|
             ary = @stack.unpack(args)



-- 
http://bugs.ruby-lang.org/