2014-11-23 3 views
2

Итак, у меня есть эта функция, которая принимает целое число. Но это не работает, и я подозреваю, что оператор if недействителен, я не мог найти что-либо в google относительно проблемы, возможно, мои навыки в поисковых системах просто сосут.Lua, если A! = (X или Y или Z)?

if mynumber != (0 or 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8) then 
      print("Please choose an integer number between 1-8")    
end 

Спасибо за помощь!

+0

«0 или 1 или 2 или 3 или 4 или 5 или 6 или 7 или 8» Возвращает 0 не так – Logo

+3

Почему бы не проверить с 'если a> = 0 и a <= 8'? – Schollii

ответ

3

Исправить. Это не так, как вы проверяете подобные вещи. Вы не можете проверить несколько значений таким образом.

or требует выражения с обеих сторон и оценивает одно выражение. Таким образом, (0 or 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8) оценивает 0, и ваше окончательное выражение равно if mynumber != 0 then.

Чтобы проверить несколько значений, как это необходимо, используйте or вокруг нескольких выражений сравнения.

if (mynumber ~= 0) or (mynumber ~= 1) or (mynumber ~= 2) ... then (также извещение ~= - оператор не равный !=).

Также не забудьте указать ответ Юхао о логике в этой строке и как проверить это правильно.

0

попробовать это:

  1. В Lua Вы проверяете, если два элемента не равны по «~ =» вместо,
  2. Если сравнить два элемента, если оператор, то всегда помните, «=!» что пункты должны вернуть булевы, так: вместо mynumber != (0 or 1 or...) попробовать что-то вроде (mynumber ~= 0) or (mynumber ~= 1) ...
2

Другие указывали основные проблемы, у вас есть, то есть, 0 or 1 or 2 or 3 or 4 or 5 or 6 or 7 or 8 вычисляется как 0, остальное игнорируется из-за короткого замыкания. Вам нужно проверить номер с этими номерами один за другим.

Однако есть одна последняя ловушка. Условие

if mynumber ~= 0 or mynumber ~= 1 then 

всегда верно, так как число либо не равно 0, в этом случае mynumber ~= 0 верно; или он равен 0, и в этом случае mynumber ~= 1 истинно.

Правильная логика должна быть: ответ

if mynumber ~= 0 and mynumber ~= 1 then 
1

Этана объясняет поведение, как наблюдаемые в Lua. Я хотел бы предложить, написание пользовательских FindIn функции для поиска:

function FindIn(tInput, Value) 
    for _ in pairs(tInput) do 
    if Value == tInput[_] then return true end 
    end 
    return false 
end 

if FindIn({1,2,3,4,5,6,7,8}, mynumber) then 
    -- ... 
end 
+1

Реализация этой функции над хэшем значительно быстрее, чем реализация ее над массивом/списком (если немного больше ввода для создания таблицы поиска). –

Смежные вопросы