【发布时间】:2017-07-05 23:36:18
【问题描述】:
$ 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 文件。我的数据中的一列是 Yes/No-ish,我在创建记录之前将其转换为 true/false。现在,我正在使用这两行代码,但它们对我来说不够优雅。更令人担忧的是,他们似乎指出我根本不明白如何在 ruby 中正确使用块。
同样,这些工作足够好:
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(){}.
非常感谢!
【问题讨论】: