私はいくつかの「モンキーパッチ」(すみません、スーパーマンパッチ)を行ってきました。そのように、以下のコードなどを"#{Rails.root}/initializers/"
フォルダー内のファイルに追加します。
module RGeo
module Geographic
class ProjectedPointImpl
def to_s
coords = self.as_text.split("(").last.split(")").first.split(" ")
"#{coords.last}, #{coords.first}"
end# of to_s
def google_link
url = "https://maps.google.com/maps?hl=en&q=#{self.to_s}"
end
end# of ProjectedPointImpl class
end# of Geographic module
end
_Point_
これらのメソッドを利用したい2 つの異なるインスタンスがあることに気付きました (どちらも同じフォーマットの文字列、つまり Well-Known Text (WKT) でした)。上記の 2 つのメソッドの正確なコピーを特定のRGeo::Geos::CAPIPointImpl
クラススペース。
次に、若々しい未経験の方法で、DRY (自分自身を繰り返さないでください) の原則について考えた後、アドホッククラスの作成に進みました。
class Arghhh
def to_s
coords = self.as_text.split("(").last.split(")").first.split(" ")
"#{coords.last}, #{coords.first}"
end# of to_s
def google_link
url = "https://maps.google.com/maps?hl=en&q=#{self.to_s}"
end
end
クラスにそれを継承するように指示しました。つまり:ProjectedPointImpl < Arghhh
Railsコンソールを停止してリロードしようとすると、すぐにこのエラーでRubyから応答がありました。
`<module:Geos>': superclass mismatch for class CAPIPointImpl (TypeError)
...
CAPIPointImpl (この場合) をその親以外の別のクラスから継承させようとする私の素朴さは、この主題に関する私の知識のギャップを非常に明確に強調していると思います
別の親から派生した 2 つのクラスに追加の共有メソッドを実際に移植するには、どのメソッドを使用できるでしょうか? ruby はこれらのタイプの抽象例外を許可しますか?