2016-09-01 9 views
11

私はKotlinの構造化機能が大好きです。デストラクチャリングによる変数の再割り当て

正しい構文がわからないケースが発生しました。どのようにして変数を再構築することができますか?

var (start, end) = startEndDate(198502) 

// intellij neither accept this ... 
start, end = startEndDate(200137) 

// ... nor this 
(start, end) = startEndDate(200137) 

答えて

9

言語の観点から、宣言を構造化代入で宣言された変数は、ちょうど別の独立した変数であり、かつ現時点でKotlinは、単一のステートメントで複数の変数を割り当てるための方法を提供していません。

あなたが唯一再びあなたの表現をdestructureと変数を一つずつ割り当てることができます。

var (start, end) = startEndDate(198502) 

val (newStart, newEnd) = startEndDate(200137) 
start = newStart 
end = newEnd 

あなたはこれらの2つの変数がいくつかの特別な意味を持っている持っているし、一緒に割り当てられるべきであることを示すために必要がある場合は、あなたをこのようにそれらを再割り当てするローカル関数を宣言することができます。

var (start, end) = startEndDate(198502) 
fun setStartEnd(pair: Pair<SomeType, SomeType>) { start = pair.first; end = pair.second } 

setStartEnd(startEndDate(200137)) 
+8

はまた、あなたが 'WITH'を使用することができますし、'(startEndDate(200137))は、{最初=始めます。終わり=秒}。 – mfulton26

+0

@ mfulton26:あなたは 'with'を工夫できますか?代替手段としてここでどうすれば使えますか? – Kushal

+1

@ Kushal、もしあなたがいくつかの変数をdestructingで割り当てていて、それらを再割り当てしたいなら、それらをより簡単に再割当てするために 'with'を使うことができます。例えば'with(startEndDate(200137)){start =最初; 'var tmpDate = startEndDate(200137);の代わりに' end = second} 'を使います。 start = tmpDate.first; end = tmpDate.second'、 'var tmpDate = startEndDate(200137); start = tmpDate.startDate; end = tmpDate.endDate'など( 'startEndDate'の戻り値の型によって異なります)。 – mfulton26

関連する問題