【发布时间】:2011-12-21 10:58:57
【问题描述】:
["H", "A", "L"].collect {|x| x.succ } # => ["I", "B", "M"] 但是
["H", "A", "L"].each {|x| x.succ } # => ["H", "A", "L"]
是什么导致这里的输出不同?
succ 方法增加一个字符串。
【问题讨论】:
标签: ruby
["H", "A", "L"].collect {|x| x.succ } # => ["I", "B", "M"] 但是
["H", "A", "L"].each {|x| x.succ } # => ["H", "A", "L"]
是什么导致这里的输出不同?
succ 方法增加一个字符串。
【问题讨论】:
标签: ruby
使用 each_char 的替代方法:
"HAL".each_char.map {|x| x.succ } # => ["I", "B", "M"]
或者只是地图
["H","A","L"].map {|x| x.succ } # => ["I", "B", "M"]
干杯:)
【讨论】:
Array#each 中块的结果被完全丢弃,each 的结果是数组本身(这就是你得到原始["H","A","L"] 的原因)。在这里,您需要一个 collect/map,如您在第一个 sn-p 中所示(创建一个新数组并保持旧数组不变)。
each 的输出被丢弃,因为each 是经典的命令式for-loop:你需要做一些副作用(从文件中读取,打印到屏幕,更新数组/散列,...) 以有效地做某事。
我的建议是避免使用each,除非有充分的理由。我的意思是,例如,可以使用每个行将行写入文件,但永远不要模拟 map、select、inject 或其他 FP abstractions。
【讨论】:
each;如果您对输出感兴趣,请使用 collect 或其同义词 map。阅读文档以获取更多信息。