ファイル更新時に自動であれこれ出来るようになってとてもとても快適なんだけど、監視を止めたいときに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
楽ちん!
おおお、、、これは素晴らしい!
クロージャがあるとは知りませんでした。
反映させてもらいました!
クロージャはどこかで使いたかったんですけどなかなか使いどころが思いつかないでいたんですよね!
これが眠りにつく直前のひらめきでビビっときまして、ついでに目がぱっちり覚めたという