あいまいな質問のタイトルで申し訳ありませんが、次の原因がわかりません。
module Capistrano
class Configuration
def puts string
::Kernel.puts 'test'
end
end
end
Capistranoが呼び出すとputs
、「テスト」は表示されませんが、元の出力は表示されます。
ただし、これも追加すると、次のようになります。
module Kernel
def puts string
::Kernel.puts 'what gives?'
end
end
さて、突然、puts
実際には「何ができるのか」ではなく、元のコンテンツではなく「テスト」が返されます。
これがなぜ起こっているのか(Rubyカーネルの内部動作についての私の限られた理解を除いて)合理的な説明はありますか?
私に目をそらすもの(しかし、どういうわけか「うまくいくように見える」):
- 最初のブロックが「test」を返すことを期待しますが、そうではありませんでした
- 2つのブロックの組み合わせが「何を与えるのか」を返すことを期待しますが、「テスト」を返しますか?
- Kernel.putsをオーバーライドする方法は、私には終わりのないループのように見えますか?