From: "usa (Usaku NAKAMURA)" Date: 2012-05-02T12:55:28+09:00 Subject: [ruby-dev:45604] [ruby-trunk - Bug #6389][Assigned] Should be able to `return' and `break' from callback method of plain DL? 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/