6

Luaの参照によって変数を別の変数に割り当てるにはどうすればよいですか?

例:「a = b」と同等のことをしたい場合、aはbへのポインタになります

背景:私が事実上次のようなものを持っている場合があります:

local a,b,c,d,e,f,g   -- lots of variables

if answer == 1 then
  -- do stuff with a
elsif answer == 1 then
  -- do stuff with b
.
.
.

PS。たとえば、以下では、b=aが値によるものであることが明らかです。注:私はCoronaSDKを使用しています。

a = 1
b = a
a = 2
print ("a/b:", a, b)

-- OUTPUT: a/b: 2   1
4

2 に答える 2

12

編集:明確な投稿と例に関して、Luaで必要な参照のタイプなどはありません。変数が別の変数を参照するようにします。Lua では、変数は単に値の名前です。それでおしまい。

以下は、同じテーブル値を参照する と の両方をb = a残すため、機能します。ab

a = { value = "Testing 1,2,3" }
b = a

-- b and a now refer to the same table
print(a.value) -- Testing 1,2,3
print(b.value) -- Testing 1,2,3

a = { value = "Duck" }

-- a now refers to a different table; b is unaffected
print(a.value) -- Duck
print(b.value) -- Testing 1,2,3

Lua でのすべての変数の割り当ては、参照によるものと考えることができます。

これは、技術的には、テーブル、関数、コルーチン、および文字列に当てはまります。数値、ブール値、および nil についても同様です。これらは不変の型であるため、プログラムに関する限り、違いはありません。

例えば:

t = {}
b = true
s = "testing 1,2,3"
f = function() end

t2 = t -- t2 refers to the same table
t2.foo = "Donut"
print(t.foo) -- Donut

s2 = s -- s2 refers to the same string as s
f2 = f -- f2 refers to the same function as f
b2 = b -- b2 contains a copy of b's value, but since it's immutable there's no practical difference
-- so on and so forth --

短いバージョン: これは変更可能な型 (Lua ではユーザーデータとテーブル) に対してのみ実用的な意味を持ちます。どちらの場合も、割り当ては値ではなく参照をコピーしています (つまり、オブジェクトのクローンやコピーではなく、ポインターの割り当てです)。

于 2012-06-27T02:16:06.030 に答える
-1

変数が値の単なる名前であることは事実です。ただし、テーブル内のキーを扱っている場合は、変数名を計算できます。これは、キー名を使用して条件付きロジックを実行できることを意味します。

myvars = { a=1, b=2, c=3.14 }

function choose(input)
    print(myvars[input])
end

choose('a')
choose('b')
a = 'a'
choose(a)
b = a
choose(b)
a = 'c'
choose(a)
choose(b)

出力:

1
2
1
1
3.14
1
于 2012-08-03T23:14:35.710 に答える