2017-08-02 96 views
2

我想重用功能參數的一些這樣的事不能重複使用功能參數

fun test(i: Int) { 
    i += 5 
} 

但作爲this distinction指出

功能參數valvar

+0

實際上,它通常被認爲是不好的做法,修改參數。我會創建一個名稱不同的新變量,將其分配給參數,然後使用它。另外,你可以將參數聲明爲'var'嗎? – Carcigenicate

+1

@Carcigenicate你不能把函數參數指定爲Kotlin中的val/var,它們暗示爲'val'。 – Todd

+0

爲什麼它被認爲是一個不好的做法我不想在外部範圍中更改參數,以避免分配它。我認爲分配更混亂, – humazed

回答

4

在Kotlin中,函數參數被視爲val。這意味着你必須在你的函數內部做些什麼才能「修改」它的引用。

你的解決方案可以工作,但我覺得這是一個不好的做法,以影響變量。這會導致混淆,並且不能很準確地涵蓋您瞭解該功能對本地功能有影響的意圖。

我會去像這樣的東西:

fun test(i: Int) { 
    var i2 = i 
    i2 += 3 // etc... 
} 
+0

我已經考慮過了,但在我的情況下,參數名稱是寬度和高度。 我覺得重命名會導致可讀性較差的代碼。 – humazed

0

我發現的唯一解決方案是使用名稱遮蔽,即類似的東西

fun test(i: Int) { 
    var i = i 
    i += 5 
} 

我不知道,如果它的最佳解決方案,因爲它感覺不對,即使是IntelliJ IDEA的提醒我這件事。

我所期待的神奇的東西一樣

fun test(var i: Int) { 
    i += 5 
} 

但unfortuantly這還不comile。

+1

這很有趣Kotlin可以用重複的參數名稱定義變量。也許這是一個錯誤。 +1 –

+0

不,不是,這只是一個不好的習慣。 – humazed

+0

謝謝,我明白了。但是你不能在Java中定義任何陰影變量。事實上,Kotlin爲此定義了另一個局部變量,您也可以更改局部變量類型,例如:'var i:String =「foo」'。 –