LuaについてInsert and pairs(t)の発見(真偽が分からない)
8591 ワード
Luaメタテーブルを勉強している間に出会った:
これは難しくありません:出力1から6です
しかしsecondtableの5をnilに変更するとsecondtable={4,nil,6}出力が
考えても分からないままinsertとpairsのドキュメントを見に行きました.
table.insert (list, [pos,] value)
listの位置posに要素valueを挿入し、要素list[pos],list[pos+1],......,list[#list]を後ろに移動します.posのデフォルト値は#list+1なのでtableを呼び出す.Insert(t,x)は、リストtの末尾にxを挿入します.
pairs (t)
tにメタメソッドがある場合_pairsは、tをパラメータとして呼び出し、返される最初の3つの値を返します.
そうでなければ、next関数、テーブルt、nilの3つの値が返されます.したがって、次のコードは
t内のすべてのキー値ペアを反復することができる.
反復中にテーブルを変更するリスクについては、関数nextを参照してください.
nilについても話していないので、私は以下の2つの構想を提出しました(私が前の知識をよく勉強していないかもしれません).
テストコード:
出力:
表示:nilを挿入できませんか?
テストコード:
出力は次のとおりです.
表示:nilを出力できませんか?
以上のように??みんなは正しいと思いますか?いやちょっと言ってくれよ^u^
-- ,table.maxn Lua5.2
-- table_maxn,
function table_maxn(t)
local mn = 0
for k, v in pairs(t) do
if mn < k then
mn = k
end
end
return mn
end
--
mytable = setmetatable({ 1, 2, 3 }, {
__add = function(mytable, newtable)
for i = 1, table_maxn(newtable) do
table.insert(mytable, table_maxn(mytable)+1,newtable[i])
end
return mytable
end
})
secondtable = {4,5,6}
mytable = mytable + secondtable
for k,v in ipairs(mytable) do
print(k,v)
end
これは難しくありません:出力1から6です
1 1
2 2
3 3
4 4
5 5
6 6
しかしsecondtableの5をnilに変更するとsecondtable={4,nil,6}出力が
1 1
2 2
3 3
4 4
5 6
考えても分からないままinsertとpairsのドキュメントを見に行きました.
table.insert (list, [pos,] value)
listの位置posに要素valueを挿入し、要素list[pos],list[pos+1],......,list[#list]を後ろに移動します.posのデフォルト値は#list+1なのでtableを呼び出す.Insert(t,x)は、リストtの末尾にxを挿入します.
pairs (t)
tにメタメソッドがある場合_pairsは、tをパラメータとして呼び出し、返される最初の3つの値を返します.
そうでなければ、next関数、テーブルt、nilの3つの値が返されます.したがって、次のコードは
for k,v in pairs(t) do body end
t内のすべてのキー値ペアを反復することができる.
反復中にテーブルを変更するリスクについては、関数nextを参照してください.
nilについても話していないので、私は以下の2つの構想を提出しました(私が前の知識をよく勉強していないかもしれません).
-- :
--1.table.insert nil
テストコード:
t1 = {1,2,3,4}
print('t1: before insert :' .. table.concat(t1,' , '))
table.insert(t1,nil)
print('t1: insert nil :' .. table.concat(t1,' , '))
table.insert(t1,5)
print('t1: insert 5 :' .. table.concat(t1,' , '))
出力:
t1: before insert :1 , 2 , 3 , 4
t1: insert nil :1 , 2 , 3 , 4
t1: insert 5 :1 , 2 , 3 , 4 , 5
表示:nilを挿入できませんか?
-- :
--2.pairs nil
テストコード:
t2 = {1,2,3,nil,5}
print(t2[4]) -- nil , nil
for k,v in pairs(t2) do
print(k .. ':' .. v)
end
出力は次のとおりです.
nil --print(t2[4])
1:1
2:2
3:3
5:5
表示:nilを出力できませんか?
以上のように??みんなは正しいと思いますか?いやちょっと言ってくれよ^u^