Próbowałem użyć udoskonalenie w IRB (v0.9.6, Ruby 2.3.0): module Foo
refine Object do
def foo() "foo" end
end
end
using Foo # => RuntimeError: main.using is permitted only at topleve
Próbuję użyć zawężania ruby do zastosowania haków szyn. Chcę uniknąć łatania małp. Kiedy małpa łatanie go będzie działać jako taki ActiveRecord::Base.class_eval do
after_find do
# do somet
W Metaprogramming Ruby 2 w rozdziale 2 w sekcji „Udoskonalenia” znalazłem następujący fragment kodu Ruby: class MyClass
def my_method
"original my_method()"
end
def another_method
Refinements było eksperymentalnym dodatkiem do wersji 2.0, a następnie zmodyfikowane i wprowadzone na stałe w wersji 2.1. Zapewnia to sposób na uniknięcie "łatania małp" poprzez zapewnienie "sposobu n
Istnieje całkiem dobra dokumentacja aktualnej implementacji udoskonaleń w ruby tutaj: http://ruby-doc.org//core-2.2.0/doc/syntax/refinements_rdoc.html, , ale są pewne dziwne przypadki narożne. Po pi