有時候程式碼太長,為了簡潔我們會將程式斷行。
emails = User.where('last_login_at >= ?', 7.days.ago)
.where.not(confirmed_at: nil)
.where.not(email: nil)
.pluck(:email)
但這樣子斷行的方式,無法直接貼到 irb 內。因為 irb 在每一行的結束就會立刻執行該段程式,無法將多行程式串接在一起執行。
trailing .
一種解法方式是將 .
移到上一行行尾,這樣 irb 就會知道那一行還沒有結束,而不會立刻執行程式。
emails = User.where('last_login_at >= ?', 7.days.ago).
where.not(confirmed_at: nil).
where.not(email: nil).
pluck(:email)
Escape the newline
也可以用 \
將行尾的換行符號跳脫掉。irb 沒有接收到換行符號,就不會將這一行結束而立刻執行。
emails = User.where('last_login_at >= ?', 7.days.ago) \
.where.not(confirmed_at: nil) \
.where.not(email: nil) \
.pluck(:email)
Begin .. end
另一種方式是將程式碼包在 begin
內,中間貼上你的程式碼。irb 會在你的 begin 定義結束後,才去跑裡面的程式。
begin
emails = User.where('last_login_at >= ?', 7.days.ago)
.where.not(confirmed_at: nil)
.where.not(email: nil)
.pluck(:email)
end
Pry
假如你使用的是 Pry
的話,它有一個 BUG 會使得你無法執行多行程式碼。
解法是在 console 內輸入這一行:
Pry.commands.delete /\.(.*)/