2013-10-13 58 views
2

join用於將數組轉換爲字符串。在下面,*names被連接,並被輸出。這是否意味着參數是數組?Ruby數組中的參數是什麼?

def introduction(age, gender, *names) 
    "Meet #{names.join(" ")}, who's #{age} and #{gender}" 
end 

puts introduction(28, "Male", "Sidu", "Ponnappa", "Chonira") 

此輸出:

符合四瀆Ponnappa Chonira,誰是28和男

回答

2

當你傳遞給*names然後introduction你得到的names Ruby的數組。星號(*)表示可變長度。在Ruby中Array類的join成員將數組的每個成員轉換爲String(如果它們是可轉換的)並將它們連接在一起使用參數join作爲分隔符。

請注意,一個方法的所有參數一起不會形成一個數組。也就是說,age,gender,*names一起不作爲數組傳入,但僅僅是該方法的單獨參數。

2

這裏是顯示* args結尾的代碼,可選參數,貪婪參數和必需參數的例子。

def something(name = 'Joe', *args, last_name) 
    puts name, args, last_name 
    puts args.inspect 
    puts "Last name is #{last_name}" 
end 

something "one", 'Smith' 

# >> one 
# >> Smith 
# >> [] 
# >> Last name is Smith 

的*(圖示)運算符表示接受0或多個參數,它並不需要在列表中的最後。現在有了命名參數,如果我沒有記錯的話,如果命名的參數需要最後一次,那將是令人驚訝的。

0個或多個參數將存儲在一個數組中。

您可以使用上面的代碼開始進行更改並探索此操作。

+0

什麼是強烈的參數? – shin

+0

我會讓[Ruby Rogues](http://ruby5.envylabs.com/episodes/432-episode-396-august-20th-2013/stories/3503-strong-params-by-example)回答這個問題。 – vgoff

+0

@vgoff,你錯誤的*命名參數*(這是Ruby功能)和*強大的參數*(這是ActiveRecord功能)。 – Hauleth

相關問題