2008-02-12
■ [rails] Railsで緯度経度(というか小数)を扱うときのTips
なんか find_by_lat_and_lng(lat, lng) とかしても1件も見つからないという現象が発生して、 チャットで聞いてみたら、どうも:floatではなく:decimalを使えばいいらしい。
なんでかというと:floatでは誤差が発生するから。:decimalだと、小数を文字列化して保存するので誤差が発生しないらしい。
- floatは「小数の近似値を保存する」と思った方がいいのかな。
■ [scheme] クロージャだけでオブジェクト指向が実現できるらしいよ
- Gauche のオブジェクトのなかみ - 言語ゲーム
- Gauche で bank-account
- Scheme:制約の拡散
- YASOS (Yet Another Scheme Object System)
クロージャを基本にしたメソッドディスパッチシステム
[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とかのメソッド名を渡して実行するとメソッド本体が返ってくると。
λすごいよλ
そういえばSICPにそんなのがありましたね。引数でメソッドを返すとか。
おお、そうなんですか(SICPを積んでいることがバレてしまった^^;) 調べてみます。
いやいや yharaさんにはもうSICPは不要かと思われますw