0

foreach ステートメントを使用して PHP でプログラミングすることに慣れてきました。

Luaにこれに相当するものはありますか?

ありがとう!

関連セクション:

function renderobjects()
    o1 = object:new{x = 30, y = 30, roomx = 0, roomy = 0, symbol = "t", name = "Tree"}
    o2 = object:new{x = 47, y = 60, roomx = 0, roomy = 0, symbol = "w", name = "Water"}
    o3 = object:new{x = 42, y = 30, roomx = 1, roomy = 0, symbol = "C", name = "Cactus"}
    table.insert(o1, objects)
    table.insert(o2, objects)
    table.insert(o3, objects)
    table.foreachi(objects, object) do
        if player.roomx = object.roomx and player.roomy = object.roomy then
            rb.putsxy(object.x, object.y, symbol)
        end
    end
end

local object = {
    x = 30,
    y = 30,
    roomx = 0,
    roomy = 0,
    name = "Unknown Object",
    touchingplayer = false,
    symbol = "u"
}

function object:new (o)
    o = o or {}   -- create object if user does not provide one
    setmetatable(o, self)
    self.__index = self
    return o
end
4

3 に答える 3

2

Lua には、テーブルに対する組み込みイテレータが 2 つあります。

Pairs() は、テーブル内のすべてのエントリを反復処理しますが、特定の順序はありません。

t={monday=1, tuesday=2, wednesday=3, thursday=4, friday=5, saturday=6, sunday=0, [7]="fooday"}
for key, value in pairs(t) do                       
   print(value, key)
end

出力:

0   sunday
fooday  7
2   tuesday
3   wednesday
5   friday
4   thursday
6   saturday
1   monday

ipairs() は、正の整数キーを使用してテーブル エントリを反復処理し、リストを順番に反復処理するために使用されます。

l={'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday', not_a_number='fooday', [0]='today', [-1]='yesterday' }
for key, value in ipairs(l) do                                                                         
  print(key, value)
end

出力:

1   monday
2   tuesday
3   wednesday
4   thursday
5   friday
6   saturday
7   sunday

ipairs() は非数値および非正の整数キーを無視することに注意してください。

于 2013-04-30T21:30:01.873 に答える
1

あなたの例は単純です:

function renderobjects()
    -- ... some of your code elided
    for _,object in ipairs(objects) do
        if player.roomx == object.roomx and player.roomy == object.roomy then
            rb.putsxy(object.x, object.y, object.symbol)
        end
    end
end

比較で==はないことに注意してください。=

この場合、配列としてipairs使用しているため機能します。objects

ジェネリックステートメントipairsを使用して、他の構造化データ型を反復処理するカスタム イテレータを作成できます。for

于 2013-04-30T22:43:42.080 に答える