$ ruby -v; rails -v; grep DESCR /etc/lsb-release; psql --version
ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux]
Rails 4.2.0
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"
psql (PostgreSQL) 9.5.5
CSV.foreach(path, {headers: :first_row}) do |row|
を使用して.csvファイルを反復処理しています。データの列の1つがYes/No-ishで、レコードを作成する前にtrue
/false
に変換しています。今、私はこれらの2行のコードを使用していますが、私にとっては十分にエレガントではありません。もっと驚いたことに、彼らは私が根本的にルビのブロックを適切に使う方法を理解していないことを指摘しているようです。Ruby CSV :: Row fetch(){ブロック}ブロックをブロックしない
temp = row.fetch("Header42") # { |something| could be processed here... }
column = (temp.nil? || !(temp.downcase.eql? "yes")) ? false : true
...しかし、私は少しを行う探しています:再び
、これらは十分に機能します。私はこれを試してみましたが、代わりに希望ブールの未翻訳の文字列になってしまった:
column = row.fetch("Header42") { |r| (r.nil? || !(r.downcase.eql? "yes")) ? false : true }
ブロックにputs
で遊んで私も火にそれを得るように見えることはできません - はるかに少ない私に与えます私はその割り当てに期待しています。
I'm using this as my documentation for CSV::Row.fetch(){}。
大変ありがとうございます!
このeikoのおかげで、私は明らかにフェッチブロックの使い方を誤解していました。私のファイルの全ての行には "yes/no/nil family"のものがありますので、デフォルト値は決して使用されません。さらに、 'tap 'を使用していませんが、この文脈ではブロックはtrueまたはfalseを返しますが、未修正の文字列オブジェクトは' .tap {}'によって返されます。 –
ああ、 'column = row.fetch(" Header42 ")&& temp.downcase ==" yes "'予期しない^ - ^を期待していますが、 あなたは絶対にありますタップ、私の間違いについての権利!私はタップを使用して、その1ライナーの渇望を常に満たすことはできないと思います。私はそれを私の答えから取り除くでしょう。 – eiko