Start-Watcherをハックしよう

ファイル更新時に自動であれこれ出来るようになってとてもとても快適なんだけど、監視を止めたいときにRemove-Watcher呼ぶのが若干めんどくさいのでちょっとハックしたい

した

最初の案
Start-Watcherの戻り値でRemove-Watcherに必要なプロパティを持たせたPSObjectを返して

$outOpject = New-Object PSObject -Property @{
    Path   = $Path
    Filter = $Filter
}
return $outOpject

Remove-Watcherの引数はどっちもValueFromPipelineByPropertyNameにしとけばほら

PS> $obj = Start-Watcher # 引数略
PS> $obj | Remove-Watcher

とってもかんたんだ

んでもなんかいまいちしっくり来ないんだよなー
結局さ、オブジェクトで包んでるとは言え外部で値持ってるから、別にそれもともとのと大差なくね、っていう
もっとこうほら、あるだろう
最初に引数で渡したらさ、それをそっくり使えればいい
そんな手段が

そう、クロージャだ

改善案
Start-Watcherの戻り値をこうしましょう

return {
    Remove-Watcher -Path $Path -Filter $Filter
}.GetNewClosure()

こうやってクロージャを返せばあとは

PS> $stopWatcher = Start-Watcher # 引数略
PS> &$stopWatcher

楽ちん!

Start-Watcherをハックしよう」への2件のフィードバック

  1. おおお、、、これは素晴らしい!
    クロージャがあるとは知りませんでした。
    反映させてもらいました!

    • クロージャはどこかで使いたかったんですけどなかなか使いどころが思いつかないでいたんですよね!
      これが眠りにつく直前のひらめきでビビっときまして、ついでに目がぱっちり覚めたという

stuncloud への返信 コメントをキャンセル