grep
コマンドのオプションに--no-filename(-h)
というものがある。
これは、マッチした内容をファイル名、Pathのプレフィックスを除いて結果を出力してくれる。
単一ファイルの検索や、標準入力からの検索時には、デフォルトで有効となっている。
用途
複数のファイルから検索して、かつプレフィックスが邪魔になるケース。
たとえばObjective-Cで、import文を調査する時に活用できる。
grep "#import" -h -R src | sort | uniq
grep
コマンドのオプションに--no-filename(-h)
というものがある。
これは、マッチした内容をファイル名、Pathのプレフィックスを除いて結果を出力してくれる。
単一ファイルの検索や、標準入力からの検索時には、デフォルトで有効となっている。
複数のファイルから検索して、かつプレフィックスが邪魔になるケース。
たとえばObjective-Cで、import文を調査する時に活用できる。
grep "#import" -h -R src | sort | uniq
reqwestでもりもり実装していて、なんか楽しい。
まだ借用チェッカーと戦ってるボーイなので、もりもりコピーして構造体たち皆所有権のあるデータ持つ、みたいな書き方してる。 まぁ使う分には引数に与えたデータを延命させたりとか、そういう気を使わなくて良いんじゃないでしょうか。教えてくれ。
https://crates.io/crates/zaif-api
cargo publish
するとcrate.ioに載って、Cargo.toml
のdependencies
に依存対象として書けるようになる。
驚いたのはDocs.rsに自動でドキュメントが出力されること。かしこい~~。
ムーブセマンティクスを忘れていた話。
Builderパターンで以下のように書いたところコンパイラにerror[E0507]: cannot move out of borrowed content
と怒られた。
enum Method { Get, Post, } struct Client { method: Method, } struct ClientBuilder { method: Method, } impl ClientBuilder { fn new() -> Self { ClientBuilder { method: Method::Get, } } fn method(&mut self, method: Method) -> &mut Self { self.method = method; self } fn finalize(&self) -> Client { Client { method: self.method, } } }
ClientBuilder.finalize()
で、self.method
の所有権を失ってしまうために怒られていた。
列挙型Method
にCopy
トレイトを実装することで解決できる。そのためのアトリビュートもある。
#[derive(Copy, Clone)] enum Method { Get, Post, }
この対処方法はドキュメントにも書いてある。
このケースは、以下の認識で書いたために引っかかってしまった。
この認識を改めていく。
ドキュメント 列挙型 より
列挙型の値(ヴァリアントと呼ぶ)は構造体の定義である。 Unit-like構造体であったり、名前付きフィールドを持つ構造体であったり、タプル構造体であったり。
enum Message { Quit, ChangeColor(i32, i32, i32), Move { x: i32, y: i32 }, Write(String), }
ドキュメント 所有権 より
全てのプリミティブ型は Copy トレイトを実装しているので、推測どおりそれらの所有権は「所有権ルール」に従ってはムーブしません。
Copyトレイトを実装しているから、所有権を失わない。
見事にドキュメントで説明される事柄を踏み抜いた
のびーるピザバーガー。これは良いものだった。もう食べちゃって写真すらないんだけれど、これは何かに書き残しておきたいと思ったのでセットドリンクを吸い上げながら執筆している。
注文して待つこと数分。座席に届いた限定バーガーは、身の丈が高い。モスバーガーに来たのかと思うほどだった。
齧る。前歯が温かくふっくらとしたバンズを裂き、ハッシュドポテトを削り、下の歯と協力して本命のチーズを断つ。滲むピザソースの塩気が舌に心地よい。
ついに口からバーガーを引き離した途端、チーズが、伸びたのだ。
伸びる。これがよく伸びる。唇で何度か手繰るもののまだ伸びる。 これは冷めたら大変だ固まってしまう。齧り、引き、噛み、また齧るサイクルを高速で繰り返し、すぐに完食した。
食べきって思う。やはりロッテリアのバーガーは新登場や期間限定品に限ると。店内だとなお良い。
まず温かく食べられる。そして何より型崩れしていない。もう一度言う、型崩れしていない。
絶品チーズバーガーもそうだった。今や哀愁すら感じる有様だが、登場したときは香ばしさすら感じるバンズ、滴らんばかりのチーズがもたらすはじめの一口は感動的ですらあった。
もしロッテリアに足を運ぶときが来たら限定商品を食べてみよう。新商品を食べてみよう。 ポテトのおかずではない、「あんたが主役」なバーガーと出会えるだろう。
C93を翌日に控えてポテトつまんでる現場からお送りしました。
自分好みの./configure
オプションをどこかに残しておきたかっただけなんだけど、そのままmakeしてしまえと思ったのです。
makeがだばだばと状況を吐き出す姿は頼もしい…
dotfiles/build-latest-vim at master · yajamon/dotfiles · GitHub
一応 2017-12-01現在のコードを転記しておくと以下のとおり。
#!/bin/bash readonly VIMREPO=$GHQ_ROOT/github.com/vim/vim cd $VIMREPO git fetch --all --prune if [ $(git rev-parse master) = $(git rev-parse origin/master) ]; then param="" while [ -z $param ]; do echo -n "Already up-to-date. continue?(yN): " >&2 read -r param _trush done if [ $param != "y" ]; then exit 0 fi fi git checkout master && git merge --ff origin/master make distclean ./configure --with-features=huge \ --enable-perlinterp \ --enable-rubyinterp \ --enable-luainterp \ --enable-fail-if-missing \ --prefix=/usr/local make sudo make uninstall sudo make install
更新が無い場合にはワンクッション置くところが工夫したところで、捗りポイントかな。
コミットハッシュを見て差分の有無を確認したり、read
できちっと値を取り出したり、知見が生きている。