为什么收集和每个方法与succ方法的工作方式不同?

lam*_*ade 0 ruby

["H", "A", "L"].collect {|x| x.succ } # => ["I", "B", "M"]

["H", "A", "L"].each {|x| x.succ } # => ["H", "A", "L"]
Run Code Online (Sandbox Code Playgroud)

造成输出差异的原因是什么?

succ方法递增一个字符串.

tok*_*and 6

Array#中的块的结果被完全丢弃,结果each就是数组本身(这就是你得到原始文件的原因["H","A","L"]).在这里你需要一个collect/map在第一个片段中显示的内容(它创建一个新数组并保持旧数组不变).

输出each被丢弃,因为它each循环的经典命令:你需要做一些副作用(从文件读取,打印到屏幕,更新数组/散列,...)来有效地做某事.

我的建议是避免,each除非有充分的理由.我的意思是,这是确定使用每个写行的文件,例如,但绝不模仿map,select,inject,或其他FP抽象.