トップ «前の日記(2008-02-11) 最新 次の日記(2008-02-13)» 編集

Route 477



2008-02-12

[rails] Railsで緯度経度(というか小数)を扱うときのTips

なんか find_by_lat_and_lng(lat, lng) とかしても1件も見つからないという現象が発生して、 チャットで聞いてみたら、どうも:floatではなく:decimalを使えばいいらしい。

なんでかというと:floatでは誤差が発生するから。:decimalだと、小数を文字列化して保存するので誤差が発生しないらしい。

floatは「小数の近似値を保存する」と思った方がいいのかな。

[scheme] クロージャだけでオブジェクト指向が実現できるらしいよ

クロージャを基本にしたメソッドディスパッチシステム

[Scheme:制約の拡散より引用]

なにそれ?と思ってコードを見てみると…

(define (MAKE-POINT the-x the-y)
  (lambda (message)
     (case message
        ((x)  (lambda () the-x)) ;; return a function which returns the answer
        ((y)  (lambda () the-y))
        ((set-x!) 
             (lambda (new-value)
                     (set! the-x new-value)  ;; do the assignment
                      the-x))                ;; return the new value
        ((set-y!) 
             (lambda (new-value)
                     (set! the-y new-value)
                      the-y))
       (else (error "POINT: Unknown message ->" message))
) )  )



(define p1 (make-point 132 75))

(define p2 (make-point 132 57))

((p1 'x))		-> 132

((p1 'set-x!) 5)	-> 5

おおお、これすげー(笑)。make-point関数を呼ぶと何かクロージャが返ってきて、 それに'xとか'yとかのメソッド名を渡して実行するとメソッド本体が返ってくると。

λすごいよλ

本日のツッコミ(全3件) [ツッコミを入れる]
ひげぽん (2008-02-13 20:42)

そういえばSICPにそんなのがありましたね。引数でメソッドを返すとか。

yhara (2008-02-15 21:17)

おお、そうなんですか(SICPを積んでいることがバレてしまった^^;) 調べてみます。

ひげぽん (2008-02-15 22:02)

いやいや yharaさんにはもうSICPは不要かと思われますw