2017-05-26 49 views
-4

在一些代碼,我發現:單個變量名在Ruby中意味着什麼?

class Job 
    @@types = [:a, :b, :c, :d].reduce({}) do |acc, cmd| 
    acc[cmd] = cmd.to_s 
    acc 
    end 
    # ... 
end 
  1. 沒有什麼傳入reduce。那是什麼意思?
  2. 有一個acc。那是什麼意思?
+4

_「沒有什麼傳入減少」 _ - 你這是什麼意思呢? '{}'被傳入'reduce',一個空的散列並不是什麼。 – Stefan

+2

我認爲你需要花一點時間來學習Ruby的基本數據類型...'nil','FALSE','[]',' 「」','{}',......都是不同的,明確定義,紅寶石中的對象。 '{}'不是「無」,它是一個空的['Hash'](https://ruby-doc.org/core/Hash.html)。 –

+0

什麼荒謬的代碼!不會通過我的代碼審查。 –

回答

6
  1. reduce被稱爲一個空哈希值。這意味着在第一次調用該塊時acc的值將是{}

  2. 在Ruby中,一個函數中的最後一條語句是返回值,所以該塊返回acc

你可能需要讀什麼reduce不會完全理解這些代碼。

1
  1. 沒有什麼傳入reduce。那是什麼意思?

這是不正確的。有一個位置參數{}傳遞到reduce以及一個塊。

但即使沒有獲得通過,有什麼大不了的?也沒有任何東西被傳入to_s,但不知怎的,似乎並沒有打擾你。

  • 有一個單一acc。那是什麼意思?
  • 這意味着同樣的事情acc上線前:取消引用變量。

    0

    閱讀documentation for reduce

    的第一個參數({})是acc初始參數,acc是什麼時候會結束reduce返回。

    它只是變換數組的哈希,最後的結果是:

    {:a=>"a", :b=>"b", :c=>"c", :d=>"d"}