Ruby の &:upcase 記法を改めて整理してみる

Ruby において面食らう記法の一つは、map メソッドなどの引数に現れる、&:upcase というような、以下の3つの要素が同時に存在する記法だと思います*1

  • アンド(アンパサンド)
  • コロン
  • 文字
    • 上記の例では upcase

改めてこの記法について整理してみます。箇条書きに番号が振ってありますが、必ずしも番号順に理解を要するものではありません。

*1:この記法は、ブロックを引数として取るメソッドが出てくると、たまに現れます

続きを読む

Ruby で クロージャ を実装する(Proc オブジェクト を用いる)

クロージャ とは

Wikipedia で「クロージャ」を見てみます。

ja.wikipedia.org

クロージャ(クロージャー、英語: closure)、関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数にて利用可能な機能・概念である。引数以外の変数を実行時の環境ではなく、自身が定義された環境(静的スコープ)において解決することを特徴とする。関数とそれを評価する環境のペアであるともいえる。

何を言っているのかさっぱり分かりません*1。具体的にコードを書いて理解をしてみました。言語は Ruby です。

Ruby で クロージャ を実装する

Proc オブジェクトを用います。Proc オブジェクトとは、ブロックをオブジェクト化したものです。詳細は別に譲ります。

クロージャを実装するので、「戻り値が Proc オブジェクト であるメソッド(関数)」を作ることが必須となります。そのメソッド(関数)を適当な変数に代入し、戻り値である Proc オブジェクト を、 call メソッドを用いて実行する、という流れです。

その前提のもと、以下に「クロージャにならない例」と「クロージャになる例」を順に書きます。

*1:初見でこれを理解できる人を尊敬します

続きを読む

C97 に行ってきました

C97 に行ってきました。 天気が良かったこともあって、ホール内は汗をかくぐらいに暑かったです。 4日間になったからなのか、リストバンド制になったからなのか、普段よりのんびりとした印象を受けました。それにしても南は快適だー。

gyazo.com

gyazo.com

gyazo.com

オフラインイベントってちょっとした同窓会の趣があります。なかなか会えなかった人とこの機会に、のような。オフラインイベントの価値の一つはそのような機会を提供してくれることにあるのかもしれません。

西・南から、青海(あおみ)までは徒歩で向かいました。ポカポカ陽気で景色を眺めながら歩いていたらいつの間にか着いていました。ほどよい気候だったので快適に歩けました。夏だったら暑さでくじけてそうです

gyazo.com

gyazo.com

私も個人として 作りたいもの / 作り続けているもの があるので、無理のない範囲で継続していきたいです。オンラインで完結する時代だからこそ、オフラインでのイベントを大切にしたいですね。

gyazo.com

bundler v2.1.2 にて --path オプションを追加したら DEPRECATED が出たので bundle config set path に移行した

流れ

まず、Bundler を v2.1.2 にした

$ 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 の警告が出た

以下のように警告が出ました。

$ 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 でデフォルトのパスを設定して、以降は --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 オプションを付与します。

Powered by はてなブログ