Rails tutorial 3~

8/9 RailsTutorial 3章
8/10 RailsTutorial4章
8/10は14時間近く勉強していたにも関わらず1章しか進まず、少し気になることがあると調べ始めてしまい全く進まなくなってしまう。

gitコマンド

削除コマンド
git branch -d ブランチ名
マージ済みのブランチのみ削除可能

git branch -D ブランチ名
条件なし削除

rails console 特殊文字

print "aiueo¥n"
aiueo¥n=> nil
print 'aiueo¥n'
aiueo¥n=> nil

特殊文字が使えずに悩んだが、調べた所macではoption+¥で\が入力できるようです。
悩んで時間を無駄にしました。

mapとeach

rails tutorial 4.3.2 でブロックの説明があったが、mapとeachの違いが分からなかったので調べました。

mapは繰り返し処理の結果を配列として出力する
繰り返し処理をして配列として使う時に使用
eachは出力される戻り値は元のまま
普通の繰り返し処理に使用

演習4.3.2.2

def yeller(str)
str.map(&:join)
end
=> :yeller
yeller(['o','l','d'])
Traceback (most recent call last):
3: from (irb):153
2: from (irb):151:in yeller' 1: from (irb):151:inmap'
NoMethodError (undefined method `join' for"o":String)

.

def yeller(str)
str.map(&:upcase)
end
=> :yeller
yeller(['o','l','d'])
=> ["O", "L", "D"]

演習問題の順番通りにjoinから実行した結果うまく動かず、この結果からmapは繰り返し処理であり配列から1つずつ要素を取り出していることを確認しました。

def yeller(str)
str.map { |s| s.upcase.join }
end
=> :yeller
yeller(['o', 'l', 'd'])
Traceback (most recent call last):
4: from (irb):171
3: from (irb):169:in yeller' 2: from (irb):169:inmap'
1: from (irb):169:in block in yeller' NoMethodError (undefined methodjoin' for "O":String)

.

def yeller(s)
s.map(&:upcase).join
end
=> :yeller
yeller(['o','l','d'])
=> "OLD"

上の2つの結果から恐らくですが
s.map(&:upcase).join
の部分は
s.map(&:upcase)
が繰り返しで最後まで処理された後に
.join
の処理が実行されているということでしょうか。