Latest post of the previous page:
??? http://www.lua.org/manual/5.1/manual.html#pdf-printJohn Doe wrote:Это не стандартная функция.
Будем считать вопрос риторическим. Как назвали, так назвали...Так в апи плагинов. Или я не понял вопрос.
Latest post of the previous page:
??? http://www.lua.org/manual/5.1/manual.html#pdf-printJohn Doe wrote:Это не стандартная функция.
Будем считать вопрос риторическим. Как назвали, так назвали...Так в апи плагинов. Или я не понял вопрос.
Вот именно, теперь запустите lua.exe и сравните поведение.Smitis wrote:??? http://www.lua.org/manual/5.1/manual.html#pdf-printJohn Doe wrote:Это не стандартная функция.
lua: far.Message(type(win.GetEnv("abrakadabra")))
вылетает с ошибкой. Похоже, баг)Если функция для несуществующей переменной возвращает nil, то в результатеShmuel wrote:Нету там бага. Сделайте lua:type() - получите то же самое.
lua: far.Message(type(win.GetEnv("abrakadabra")))
должны получить тоже, что и при lua: far.Message(type(nil))
. Нет?lua: far.Message(type(os.getenv("abrakadabra")))
как надо. И даже так: lua: far.Message(os.getenv("abrakadabra"))
с чего вы взяли, что win.GetEnv для несуществующей переменной возвращает nil?Smitis wrote:Если функция для несуществующей переменной возвращает nil
Во-первых, документацияzg wrote:с чего вы взяли, что win.GetEnv для несуществующей переменной возвращает nil?Smitis wrote:Если функция для несуществующей переменной возвращает nil
Code: Select all
win.GetEnv
result = win.GetEnv (var)
Parameters:
var: string
Returns:
result: string, or nil
Description:
Use this instead of os.getenv, since the latter
does not always work correctly.
Не только в этих случаях, хотя, допустим, тот же far.Message где-то использует type.Однако, во всех случаях, кроме type() и assert() всё будет работать правильно.
far.Message( win.GetEnv("abrakadabra") )
эквивалентно far.Message()
и поэтому выдаёт ошибку. Понятно.far.Message( win.GetEnv("abrakadabra") or "env var not exist" )
работает, т.е. выражение win.GetEnv("abrakadabra") or "env var not exist"
не то же самое, что or "env var not exist"
значит несоответствие между документацией и реализацией.Smitis wrote:Во-первых, документация
можно вернуть одно значение со значением nil, можно вернуть ноль значений. очевидно, это разные вещи.Smitis wrote:Напрямую об этом не сказано, но в каких-то случаях nil всё-таки возвращается.
Во всяком случае это будет логичным поведением, чем отсутствие возвращаемых значений, которое иногда интерпретируется как nil, а иногда вызывает ошибку.Shmuel wrote:Тем не менее, во избежание повторения подобных тем, я собираюсь сделать, чтобы действительно везде возвращался nil в подобных функциях.
Внимательно читаем здесь (от 2.5 до 2.5.1). Обращаем особое внимание на слово "adjusted".Smitis wrote:Во всяком случае это будет логичным поведением, чем отсутствие возвращаемых значений, которое иногда интерпретируется как nil, а иногда вызывает ошибку.