0

各オブジェクトには、変数を関連付けることができる参照がありますよね?

これらの参照はどのように見えますか? print(table1) を実行したときに得られるものですか?

たとえば、0x100108fb0?

もしそうなら、文字列や数値などのよりプリミティブな型の参照を表示できる関数はありますか?

4

2 に答える 2

4

オブジェクト、参照、変数を混同しないでください。

Lua 5.2リファレンスマニュアルからの引用:

テーブル、関数、スレッド、および (完全な) ユーザーデータ値はオブジェクトです。変数には実際にはこれらの値は含まれず、それらへの参照のみが含まれます。

したがって、変数の値が型nilまたは数値である場合、変数はそれを参照するだけでなく、実際にそれを含みます。この型に関連する参照はありません。上記のリファレンス マニュアルからの引用で文字列が省略されている理由がわかりません。おそらく文字列は不変であるため、変数に文字列参照または値が含まれているかどうかは、Lua プログラマーにとって何の違いもありません。ただし、技術的には、C の観点からすると、文字列は含まれていない変数から参照されます。

参照は単なるポインタであり、参照されるオブジェクトのメモリ内のアドレスです。16 進数として出力すると、実際には のように「見えます」0x100108fb0

もしそうなら、文字列や数値などのよりプリミティブな型の参照を表示できる関数はありますか?

後者については、私が書いたように、参照はまったくありません。文字列の場合、単純な Lua でアドレスを出力する方法はありませんが、とにかくそれを知る必要はありません。

また、Luaリファレンス マニュアルでのプログラミングの適切なセクションを読むこともできます。

于 2013-03-03T11:59:30.283 に答える
1

各オブジェクトには、変数を関連付けることができる参照がありますよね?

いいえ。Lua はタグ付き共用体 (型、値) として値を表します。numberboolまたはを表す変数nilの場合、値は共用体に直接格納されます。、、、stringおよびの場合table、値はポインター (参照)、またはオブジェクトのヘッダーのメモリ位置に相関する一連のポインターです。functionuserdatathread

これらの参照はどのように見えますか?

Oberon が言ったように、参照はメモリ内のスポットを指し、16 進数で表すと 0x0 のようになります。

もしそうなら、文字列や数値などのよりプリミティブな型の参照を表示できる関数はありますか?

numberboolまたはnilには参照がありません。文字列の場合、Lua でアドレスを出力する標準的な方法はありません。、およびprint()tableを使用できます。ユーザーデータについては不明です。これは自分で定義する必要があるかもしれません。functionthread

これらの型の実装の詳細の多くは、この記事で平易な言葉で説明されています。

于 2013-03-04T05:40:34.123 に答える