Re: [問題] Rails 新手語法問題

看板Ruby作者 (高 見龍)時間9年前 (2015/03/04 14:54), 編輯推噓4(400)
留言4則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《GinginDenSha (gingin)》之銘言: : 在 migration 中, : 使用 create_table 時 : 通常會寫成 : create_table :table_name do |t| : end : create_table 的 signature 為 : create_table(table_name, options = {}) : 有 table_name 及 options 兩個 parameters : 為什麼不是寫成 : create_table :table_name, do |t| : end : 這樣子呢? (兩個parameters 所以用 , 隔開) : 還是說以 block 為 parameter 時,可以不用使用 , : 希望各位大大解惑 : 謝謝 補充幾件事: 一、在 Ruby 的方法呼叫可適時忽略小括號。 二、在 Ruby 的方法,如果最後一個參數是 hash,它的大括號可以省略。 三、接在方法後面的 block 本身並不是參數。 一、省略小括號 舉個例子來說: 5.times { ... } 它的原形其實是: 5.times() { ... } 只是小括號被省略了 二、省略大括號 在 rails 裡相信大家都用過 link_to 這個 view helper: link_to "Hello", root_path, class: 'btn btn-default', method: :post 這段程式看起來好像有 4 個參數,但事實上只有 3 個 因為它的原形是: link_to("Hello", root_path, {class: 'btn btn-default', method: :post}) 最後的參數是一個 hash,常被省略大括號 三、block 本身並不是參數 def greeting yield end greeting { puts "hello" } 後面那段 block 其實並不是直接傳進 greeting 的參數 而是在 greeting 裡的那個 yield 把程式的控制權暫時的交出來給跟在外面的 block 待 block 執行完之後再取回控制權,然後繼續往下執行.. 但,萬一 greeting 方法沒傳 block 給它,它就會出現 LocalJumpError 的錯誤 所以通常會再檢查看看是不是有 block 傳進來,有的話再 yield def greeting yield if block_given? end (其實也是可以把 block 當參數傳進方法裡,但又是另一種寫法了) 以上,供大家參考 :) -- http://blog.eddie.com.tw/ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 210.61.216.119 ※ 文章網址: https://www.ptt.cc/bbs/Ruby/M.1425452043.A.2DB.html

03/04 17:49, , 1F
感謝補充
03/04 17:49, 1F

03/04 23:08, , 2F
好文推~!
03/04 23:08, 2F

03/12 02:43, , 3F
03/12 02:43, 3F

03/23 20:09, , 4F
推推推
03/23 20:09, 4F
文章代碼(AID): #1KzgmBBR (Ruby)
文章代碼(AID): #1KzgmBBR (Ruby)