私はRedis gemを使用して赤目にアクセスしています。返すハッシュのキーを.hgetallに象徴したいと思います。 this threadでは、@pleternは宝石の_hashifyメソッドにパッチを当てる方法を示しています。Rubyのサブクラスからラムダ変数をオーバーライドする方法は?
これはもう少し前のことですが、現在の実装では、メソッドの代わりにRedisから返されたリストをラムダからHashify
まで使用しています。 See line 2728
は、私は方法のために使用されるものと類似のもの、以下、私の独自の実装で「オーバーライド」に、このラムダをしようとされています:
class MyRedis < Redis
private
Hashify =
lambda { |array|
hash = Hash.new
array.each_slice(2) do |field, value|
hash[field.to_sym] = value
end
hash
}
end
と私のRedisServiceで:
class RedisService
class << self
def hgetall(key)
redis.hgetall("room:"+room_name)
end
private
def redis
@@redis ||= MyRedis.new
end
end
end
私はクラスで遊んだことがあり、宝石のHashifyラムダを無効にすることはできませんでした。
リンク先の指定フックを使用して実装しようとしましたか? (例えば、あなたのサブクラスで '_hashify'メソッドを定義していますか?現在の問題は、' Hashify'定数を再定義しようとすると、インスタンス化を制御する能力と関係します。例えば、コードベースのいずれかの部分が 'Redis.new 'あなたのサブクラスをエスケープしておらず、' Hashify'の親クラスの実装に戻る – engineersmnky
私はMyRedis.newを呼び出すだけです。はい、私は_hashifyとno luckを定義しようとしました。 –
あなたが呼んでいることはそれほど重要ではありません。あなたは 'Redis'からすべてのメソッドを継承していますので、例えば' MyRedis :: current'を呼び出すと、これは 'MyRedis'インスタンスではなく' Redis'インスタンスを返します。 – engineersmnky