搜尋

首頁  >  問答  >  主體

ruby-on-rails - 想要翻譯一段ruby的程式碼,有兩句話看不懂

  1. @item_array = Hash.new { |hash| hash = Hash.new(false) }
  2. @item_array[i] = [] unless @item_array.member? sindex;

第一句覺得很奇怪啊,沒理解錯的話是創建了一個二維hash表吧。但是很不解的是為什麼ruby的hash可以給定一個初始值?隻有值嗎?鍵呢?鍵在哪兒?

第二句那個unless很繞啊,真搞不懂為啥要有這樣的關鍵字,那句話意思是說:
除非存在sindex這個鍵,我賦值為[],否則。。。得,按我這樣理解這個“否則”還不知道要幹嘛!?

請大家幫我看看吧,先謝謝啦。

PHPzPHPz2899 天前974

全部回覆(1)我來回復

  • 天蓬老师

    天蓬老师2017-04-21 11:21:07

    第一個問題:http://ruby-doc.org/core-2.1.0/Hash.html#method-c-new
    在多寫幾句吧,這裡的用法可以用兩種

    xxx = Hash.new { |hash| Hash.new(false) }
    

    xxx = Hash.new { |hash,key | hash[key] = Hash.new(false);nil }
    

    實際上,問題上面寫的hash = Hash.new(false);是完全沒有必要的,這句話的意思其實是
    其實我只要

     Hash.new { Hash.new(false);}
    

    就夠了。

    第二個問題:如果item_array不存在符號為sindex的成員,那就執行前面的@item_array[i] = []。這個語法是把if(或則while unless)之類的子句後置。表達的其實是

    xxx if condition
    

    =>

    if condition
      xxx
    end
    

    本質上就是少了幾行。 。

    回覆
    0
  • 取消回覆