NeedleをRuby1.9で使とうとしてる。

スポンサーリンク

とりあえずエラー表示の削除はこれ。

http://stackoverflow.com/questions/8890891/needle-definition-context-rb36-warning-undefining-initialize-may-cause-seri

class DefinitionContext
( private_instance_methods +
protected_instance_methods +
public_instance_methods –
[ :instance_eval, :object_id, :__id__, :__send__, :initialize,
:remove_const, :method_missing, :method, :class, :inspect, :to_s,
:instance_variables, :block_given? ]
).
each { |m| undef_method m }

c:/Ruby192/lib/ruby/gems/1.9.1/gems/needle-1.3.0/lib/needle/thread.rb

Thread.criticalが非推奨になったからなんとかしなきゃいけない。
while (Thread.critical = true; @locked)

whileの中が面白い。@lockedの値だけでループの継続処理の判断を行う。
Thread.criticalはイテレータの繰り返し判断の前に毎度繰り返し処理される。

うーん。
とりあえず暫定処置として、@m = Mutex.new をinitialize に加えて、
thread.critical = trueの部分を @m.lock
thread.critical = falseの部分を @m.unlock に変えたけど、これで正しいかどうかは超不安・・・

これで進めます。

[追記]
thread.rb 全然ダメだったから結構書きなおした。
これで正しいかは不明・・・。
てか、なんでオリジナルのQueryableMutexなんて使おうとしてるのかが分からない。

#–
# =============================================================================
# Copyright (c) 2004, Jamis Buck (jamis@37signals.com)
# All rights reserved.
#
# This source file is distributed as part of the Needle dependency injection
# library for Ruby. This file (and the library as a whole) may be used only as
# allowed by either the BSD license, or the Ruby license (or, by association
# with the Ruby license, the GPL). See the “doc” subdirectory of the Needle
# distribution for the texts of these licenses.
#

コメント

タイトルとURLをコピーしました