私は偶然見つけたlua
を学ぼうとしながら、これよりも
a = {"a"}
b = a
は(驚き)を生成しない場合に:
a
{"a"} --[[table: 0x046bde18]]
b
{"a"} --[[table: 0x046bde18]]
が、その後の場合は:
a[2] = "b"
a == b
はまだtrue
ですか?
a
{"a", "b"} --[[table: 0x046bde18]]
b -- this is a surprise
{"a", "b"} --[[table: 0x046bde18]]
この両方の方法を動作するようです:新しい値はb
に割り当てられている場合、それはまたa
に割り当てられます。 a
値が変更された場合(a = 2
)、その後b = a
次いでb
は、元の値(静止b = 1
)を保持する:私はa
値(a = 1
例)を割り当てる一方
。
質問
- なぜこの現象が
a
はアレイ/テーブルまたは値であるwheatherによって異なりますか?組み込みのメタテーブル(__newindex
)が原因ですか? - このようなアレイ/テーブルの動作の目的は何ですか?
a
とb
を何らかの形で区別したい場合(またはb
を変更する前にa
の値を保存する場合はどうすればよいですか)
(私はマニュアルLuaのリファレンスのLuaのAssignmentとMetatables and Metamethods章を読みますが、そのような行動はoccuresなぜまだ見当もつかない。)
なぜこのような一般的な問題がありますか?あなたがしているのは、変数aに代入された値に変数bを代入することだけです。 – warspyking
初心者のプログラマーとしての@warspyking私はそれが直感的ではないことを発見しました(しかし、解答で説明されているように正当なものです) – Siemkowski