фона:
- функция может иметь любое количество операторов возврата, которые возвращают любое число значений, и может варьироваться от вызова к вызову ,
or
- оператор селектора: он возвращает первый операнд без «ложных». (Это второе выражение операнда не оценивается, если это необходимо.)
- выражение, которое дает список, сохраняет весь список в контексте списка (например, последнее выражение в списке, такой оператор возврата), но только первый значение в контексте без списка (например, внутри круглых скобок).
Непонятно, какие возвратные списки вы хотите вернуть и при каких условиях. То, что вы показываете, похоже, если f() возвращает список с первым значением ни nil
, ни false
, верните это одно значение; иначе возвращаем пустой список.
Но иногда это не имеет значения, если вы возвращаете списки с избыточными значениями, в частности список из nil
вместо пустого списка. В других случаях полезно возвращать одинаковое количество значений каждый раз.
Итак, вот несколько альтернатив.
Возврат все значения f() 'ы результат списку
return f()
Или возвращать только первое значение в е()' s результат-список, nil
если ни один
return (f())
Или вернуть первое значение в е() 's результат-список, если он не является ни nil
, ни false
, иначе вернуть nil
return f() or nil
Или вернуть первое значение в е() 's результат-список, если он не является ни nil
, ни false
, иначе вернуть false
return f() or false
Если вам неудобно иметь безусловный возврат в этой точке ваш код, вам нужно будет перестроить ваш поток управления - и в любом случае, возможно, выиграет от меньшего потока управления.
Нет сокращений. Такова природа Луа. – lhf
Можете ли вы привести более крупный пример с небольшим контекстом? Если это ваше тело всей функции, его можно легко свести к 'return f()' или 'return f() или nil' (если вы хотите избежать возврата false), учитывая, что ветка else еще ничто. 'return f() или (function() return .... end)()' можно использовать для создания водопадов, но это немного уродливые вещи. Как правило, нет, нет никакого способа вернуть результат, только если результат. – Oka
Вам нужен эффективный код или красивый код? – warspyking