2016-10-08 2 views
1

フィボナッチジェネレータを実装する際に、なぜletキーワードを使用するのか理解しようとすると混乱します。我々は(次の文の前)whileループでletなくvarを使用しないのはなぜwhileループ&letキーワードの混乱を招くGeneratorTypeの実装

struct FibonacciGenerator: GeneratorType { 
typealias Element = Int 

var values = (0, 1) 

mutating func next() -> Element? { 
    self.values = (
     self.values.1, 
     self.values.0 + self.values.1 
    ) 
    return self.values.0 
    } 
} 

var generator = FibonacciGenerator() 
while let next = generator.next() { 
if next > 10 { 
    break 
} 
print(next) 
} 

答えて

1

letは、定数を定義するときに使用する必要があります。つまり、後で変更することはできません。 nextをいつでも変更する場合は、varキーワードを使用して変数として宣言する必要があります。

+0

実際に私の質問を読んだことはありますか?次のオブジェクトが新しい値に変更され、キーワードは次のオブジェクトが値を変更できないことを意味します。だから私は、誰かが次のオブジェクト(または変数または定数私もそれを今どのように名前を知っていない)知っている場合、私は私が私に尋ねてくださいいくつかのアイデアを実現することはできないと思う。 –

+0

'generator.next()'が非オプションの値を返さなくなるまで、あなたは 'next'定数を何度も何度も宣言し直しています。あなたは決して 'next'の価値を変えていません。変数/定数の宣言と値の代入の違いを理解しておいてください。 –

+0

ご協力いただきありがとうございます! –

0

これは、オプションのバインディングです(whileループで使用します)。 next()はオプションです。そこに少しのコードがありませんが、「次はまだ値が返ってこないうちに、このことをやってください」と言っているだけです。 whileループではxを変更しないので、var宣言は必要ありません。私はあなたがその状況でvarを使用できるかどうかもわかりません。また、次の変数に名前をつけたのは混乱しているようです。あなたは言ったかもしれない

while let nextValue = next(){...} 
関連する問題