1

私はJavaでプログラミングするように教えられました。Lua は私にとって初めてで、宿題をしようとしましたが、次の性質の if ステートメントが何を意味するのかわかりません。

コードは次のとおりです。

local function getMinHeight(self)
    local minHeight = 0
    for i=1, minimizedLines do
        local line = select(9+i, self:GetRegions())
        **if(line) then
            minHeight = minHeight + line:GetHeight() + 2.5
        end**
    end
    if(minHeight == 0) then
        minHeight = select(2, self:GetFont()) + 2.5
    end
    return minHeight
end

前後に**が付いているif文はよくわからない部分です。if ステートメントが何をチェックしているのかわかりません。行が nil でない場合は? ラインが存在する場合は?もし何か?

4

2 に答える 2

8

Lua では、条件式で true でないnil、またはfalsetrue と評価されるもの。

行が nil でない場合は? ラインが存在する場合は?

どちらも同じ意味なので、はい。

このselect関数は、引数のリストから特定の引数を返します。主に で...使用されますが、この場合は によって返される (i+9) 番目の値を選択するために使用されていますself:GetRegions。そのような値がない場合 (たとえば、GetRegions が 5 つの値しか返さない場合)、selectnil を返します。

if(line)から値が返されたことを確認していますselect

if(line)if(line ~= nil)nil は条件で false と評価されるため、 のショートカットとして使用されています。


このショートカットが常に適切であるとは限らないことに注意してください。たとえば、次のようにテーブル内のすべての値を反復できます。

key, val = next(lookup)
while key do
    print(key, val)
    key, val = next(lookup, key)
end

ただし、テーブルのキーの 1 つが次の場合、これは失敗しfalseます。

lookup = { 
    ["fred"] = "Fred Flinstone",
    [true] = "True",
    [false] = "False", 
}

したがって、次のことを明示的に確認する必要がありnilます。

key, val = next(lookup)
while key ~= nil do
    print(key, val)
    key, val = next(lookup, key)
end
于 2012-05-24T15:40:48.657 に答える
2

nilMud が言うように、lua ではand以外のものはtruefalseと見なされます。したがって、上記はorでない限り合格します。iflinenilfalse

そうは言っても、あなたが質問を表現した方法、つまり「引数が1つしかない場合」が少し心配です。

まず、これは「引数」と呼ばれるのではなく、と呼ばれます。そして、ほとんどの言語では常に 1です。たとえば、Java では、次のようなことができます。

bool found = false

...

if(found) {
  ...
}

if式の最終的な値のみを気にします。それが単一の変数であるか、より複雑な構造であるかは気にしません。

于 2012-05-24T16:54:42.037 に答える