2015-10-09 7 views
5

Это очень легко исправить; просто сделайте это return nil, но почему не работает мой код без этой строки?Почему мой код печатает только один раз?

function x(bool) 
    if bool then 
     return "!" 
    end 
end 

print(x(true), x(false), x(false)) 

Что делает его еще более запутанной, что всегда печатает nil, столько раз, сколько я называю x(false) вычитать 1.

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

+2

Число значений, возвращаемых вызовом функции ПЕРЕД ПОМОЩЬЮ COMMA настроено на единицу, количество значений последнего вызова не регулируется. Итак, вы напечатали значения «1 + 1 + 0» –

ответ

6

The manual говорит:

Если управление достигает конца функции, не сталкиваясь с return заявление, то функция возвращает без результатов.

Обратите внимание, что возвращение результата не отличается от возвращаемого nil.


В этом вызове:

print(x(true), x(false), x(false)) 

как x(false) возвращает ничего, однако, все, кроме последнего элемента не всегда соответствует ровно одному результату.

Обычно мы видим вызовы функций, возвращающие один или несколько результатов, оставляя только первый. Здесь нет результата также заполнен nil.

+0

Я не понимаю, почему он не просто печатает «!» Затем? И почему бы не 2 ниль? – warspyking

+0

@warspyking, как сказал @YuHao, последняя функция не печатает 'nil', потому что она не возвращает' nil' (вместо этого ничего не возвращает). Результат от второй до последней функции отображается как «nil», потому что, хотя он ничего не возвращает (так же, как и последняя функция), результат * отрегулирован * на 'nil', чтобы сохранить правильное количество результатов. Измените это на 'x (true), x (false), 1'; вы хотите, чтобы результат был «!!», nil, 1', а не ''! ", 1', right? –

+0

@Paul Я полагаю, что это правда, но если он хочет «сохранить правильное количество результатов», почему последнее не настраивается? – warspyking

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