Comment detail

ファイル更新の監視 (Nested Flatten)
なんか根本的にわかってないかもですが・・
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
(use file.util)

(define filename "hoge.txt")

(define (modify-checker)
  (let loop ((lastmodified (file-mtime filename)))
    (sys-sleep 3)
    (if (= lastmodified (file-mtime filename))
        (loop lastmodified)
        (begin (print "modified!")
               (loop (file-mtime filename))))))

(modify-checker)
同じ方針ですが、modifyされているときのアクションは純粋に副作用だけなので(printするだけ)、

(if 条件 (loop) (begin (action) (loop)))

よりは

(unless 条件 (action))
(loop)

のように副作用だけくくり出してしてしまうのが好みですね 
(分岐が増えた場合でもloopは一箇所にまとめられるし)。たとえば:
1
2
3
4
5
6
7
(define (modify-checker)
  (let loop ((previous #f)
             (modified (file-mtime filename)))
    (when (and previous (not (= previous modified)))
      (print "modified"))
    (sys-sleep 3)
    (loop modified (file-mtime filename))))
おお、キレイ!
勉強になります。ありがとうございます。

あと自分のでは、8行目と11行目の間に更新されると"modified!"の出力が一回少なくなってしまいますね。

Index

Feed

Other

Link

Pathtraq

loading...