2012-05-24 2 views
1

Меня научили программировать на Java. Lua для меня новичок, и я попытался сделать домашнее задание, но не уверен, что означает утверждение, приведенное ниже.В 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. Если линия не равна нулю? Если линия существует? Если что?

ответ

8

В Lua ничего, что не nil или false оценивает true в условном выражении.

Если линия не ноль? Если линия существует?

Да для обоих, потому что они как бы означают одно и то же.

Функция select возвращает конкретный аргумент из своего списка аргументов. Он используется в основном с ..., но в этом случае он используется для выбора (i + 9) -го значения, возвращаемого self:GetRegions. Если такого значения нет (например, если GetRegions возвращает только 5 значений), то select возвращает нуль.

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 

Однако это неудачу если одна из кнопок таблицы происходит быть 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 
+0

Благодарим вас за разъяснение. Я ценю это. – user1415451

+0

Удивительный ответ, спасибо большое! Извините снова за аргумент вместо выражения: D – user1415451

2

Как говорит Mud, в Lua ничего, кроме nil и false считается правдой. Таким образом, if выше будет проходить до тех пор, пока line не является nil или false.

Тем не менее, это меня немного беспокоит, как вы сформулировали вопрос - «если только с одним аргументом».

Во-первых, это не называется «аргумент» - это называется выражение. И в большинстве языков всегда один.В Java, например, вы могли бы сделать что-то вроде этого:

bool found = false 

... 

if(found) { 
    ... 
} 

if s заботиться только о конечном значении выражения; им все равно, является ли это одной переменной или более сложной конструкцией.

+0

Gotcha, спасибо за разъяснение. Я буду более точным в своей терминологии в будущем. Спасибо, что объяснили это: D – user1415451