2017-06-02 77 views
2

我是Kotlin的新手,難以理解init function如何在陣列環境中工作。特別是,如果我想使用String類型的數組進行:Kotlin Array init函數

val a = Array<String>(a_size){"n = $it"} 
  1. 這工作,但到底是什麼"n = $it"是什麼意思?這看起來不像init函數,因爲它位於大括號內而不在括號內。

  2. 如果我想要一個數組Intinit函數或大括號內部的部分是什麼樣子?

回答

7

你調用一個初始化構造函數:

/** 
* Creates a new array with the specified [size], where each element is calculated by calling the specified 
* [init] function. The [init] function returns an array element given its index. 
*/ 
public inline constructor(size: Int, init: (Int) -> T) 

因此,你傳遞的功能,這將調用每個元素的構造函數。的a結果將是

[ 
    "n = 0", 
    "n = 1", 
    ..., 
    "n = $a_size" 
] 

如果你只是想創建與所有0值的數組,做它像這樣:

val a = Array<Int>(a_size) { 0 } 

或者,您可以通過以下方式創建數組:

val a = arrayOf("a", "b", "c") 
val b = intArrayOf(1, 2, 3) 
+1

如果我不想用任何值初始化數組會怎麼樣?這個Java片段的Kotlin相當於ArrayList lst = new ArrayList (10);' – Araf

+2

在Java中,這將產生一個包含所有'0'值的列表。在Kotlin中,你必須明確地指定它。 – nhaarman

+0

我明白了。但我正在編寫一個樹枝模板的過程中,我試圖推廣各種數據類型的數組創建語法。所以我想要的東西是:'Array <{{TYPE}}>(a_size){{{GENERAL_INITIALIZER}}}'。 這是可能的當前語法? – Araf