Ruby において面食らう記法の一つは、map
メソッドなどの引数に現れる、&:upcase
というような、以下の3つの要素が同時に存在する記法だと思います*1。
- アンド(アンパサンド)
- コロン
- 文字
- 上記の例では
upcase
- 上記の例では
改めてこの記法について整理してみます。箇条書きに番号が振ってありますが、必ずしも番号順に理解を要するものではありません。
*1:この記法は、ブロックを引数として取るメソッドが出てくると、たまに現れます
Wikipedia で「クロージャ」を見てみます。
クロージャ(クロージャー、英語: closure)、関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数にて利用可能な機能・概念である。引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決することを特徴とする。関数とそれを評価する環境のペアであるともいえる。
何を言っているのかさっぱり分かりません*1。具体的にコードを書いて理解をしてみました。言語は Ruby です。
Proc オブジェクトを用います。Proc オブジェクトとは、ブロックをオブジェクト化したものです。詳細は別に譲ります。
クロージャを実装するので、「戻り値が Proc オブジェクト であるメソッド(関数)」を作ることが必須となります。そのメソッド(関数)を適当な変数に代入し、戻り値である Proc オブジェクト を、 call
メソッドを用いて実行する、という流れです。
その前提のもと、以下に「クロージャにならない例」と「クロージャになる例」を順に書きます。
*1:初見でこれを理解できる人を尊敬します
C97 に行ってきました。 天気が良かったこともあって、ホール内は汗をかくぐらいに暑かったです。 4日間になったからなのか、リストバンド制になったからなのか、普段よりのんびりとした印象を受けました。それにしても南は快適だー。
オフラインイベントってちょっとした同窓会の趣があります。なかなか会えなかった人とこの機会に、のような。オフラインイベントの価値の一つはそのような機会を提供してくれることにあるのかもしれません。
西・南から、青海(あおみ)までは徒歩で向かいました。ポカポカ陽気で景色を眺めながら歩いていたらいつの間にか着いていました。ほどよい気候だったので快適に歩けました。夏だったら暑さでくじけてそうです
私も個人として 作りたいもの / 作り続けているもの があるので、無理のない範囲で継続していきたいです。オンラインで完結する時代だからこそ、オフラインでのイベントを大切にしたいですね。
$ gem update bundler
を行って Bundler のバージョンを v2.1.2
にしました。
$ gem update bundler Updating installed gems Updating bundler Fetching: bundler-2.1.2.gem (100%) Successfully installed bundler-2.1.2 Parsing documentation for bundler-2.1.2 Installing ri documentation for bundler-2.1.2 Installing darkfish documentation for bundler-2.1.2 Done installing documentation for bundler after 8 seconds Parsing documentation for bundler-2.1.2 Done installing documentation for bundler after 3 seconds Gems updated: bundler
以下のように警告が出ました。
$ bundle install --path vendor/bundle [DEPRECATED] The `--path` flag is deprecated because it relies on being remembered across bundler invocations, which bundler will no longer do in future versions. Instead please use `bundle config set path 'vendor/bundle'`, and stop using this flag
bundle config set path
でデフォルトのパスを設定して、以降は --path
を使わないようにしました。
$ bundle config set path vendor/bundle Your application has set path to "vendor/bundle". This will override the global value you are currently setting $ bundle install (省略) Bundle complete! 59 Gemfile dependencies, 209 gems now installed. Bundled gems are installed into `./vendor/bundle`
$ bundle config set
した値は、rbenv を使っている場合は ~/.bundle/config
に書き込まれ、全ての bundle (bundler) コマンドで参照されます。~/.bundle/config
の中身は例えば以下のとおりになります。
--- BUNDLE_PATH: "vendor/bundle"
プロジェクト配下の .bundle/config
に設定を書き込みたい場合は、$ bundle --local config set
のように --local
オプションを付与します。
周辺でじわじわと盛り上がってる「BUSTAFELLOWS」ですが、ふとストアを覗いていたらなんと体験版がありました!!
即、ダウンロードを仕掛けました。
皆さんのレビューや感想の記事を読んでると間違いなく手を出しそうな予感がします。