Size: a a a

2021 October 29

RM

Roy Mustang in pro.lua
аа проглядел
источник

G

GNU/Vsevolod in pro.lua
Хоистинга нету, т.е. не можешь
источник

G

GNU/Vsevolod in pro.lua
Жс тоже интерпретируемый
источник

ИК

Илья Курьянов... in pro.lua
Интерпретируемость здесь вообще ни при чём. Перл, например, тоже интерпретируемый:
https://perlbanjo.com/59472d4df2
источник

S

Snusmumriken in pro.lua
Это значит только одно: перл сначала собирает все определения (грубо говоря вытягивает их наверх или что-то такое), а потом исполняет.

В луях так тоже можно, но надо препроцессить.
источник

S

Snusmumriken in pro.lua
Или при попытке вызова неопределённых функций приостанавливает интерпретатор и мотает дальше, пока не наткнётся. Нелинейное исполнение типа. Я не в курсе как работает перл.
источник

L

Leon174 in pro.lua
Пришел Снус и все объяснил. А мне лень.
источник

ИК

Илья Курьянов... in pro.lua
Естественно. Это лишь пример того, что вообще не важно "интерпретируемый" язык, или "компилируемый", т. к. почти все "интерпретируемые" языки всё равно компилируются в какое-то промежуточное представление, которое потом выполняется.
источник

ИК

Илья Курьянов... in pro.lua
Просто компилятор перла собирает определения, а компилятор луёв — нет
источник

S

Snusmumriken in pro.lua
Но это ломает последовательности.
источник

ИК

Илья Курьянов... in pro.lua
Ну просто такое поведение у языка, если определений несколько, то берётся последнее
источник

ИК

Илья Курьянов... in pro.lua
Если писать use warnings, то тебя об этом предупредит
источник

ИК

Илья Курьянов... in pro.lua
Хотя вообще я с ходу не скажу, как это работает с переопределением функций в рантайме
источник

RM

Roy Mustang in pro.lua
@smertig а есть какие то коллизии для имен функций?
Например, если объявлено в разных .lua скриптах одинаковые имена функций

-- temp.lua
function foo()
end

-- temp_other.lua
function foo()
end
источник

S

Snusmumriken in pro.lua
Вот этот вариант. Перл ничего не исполняет, сначала делает первый прогон скрипта и вылавливает определения, потом второй прогон где игнорирует определения и только исполняет.
источник

АК

Александр Караев... in pro.lua
Зависит от того, в каком окружении выполняется файл, и от модификаторов local и вообще скоупа функции.
В этом примере если просто сделать два dofile, то функция перезапишется
источник

АК

Александр Караев... in pro.lua
function foo() .. end - сахар для foo = function() .. end
источник

S

Snusmumriken in pro.lua
Исполняется активная в данный момент функция:

foo() -- ошибка, этой функции пока нет

require"temp.lua"
foo() -- вызвана из temp.lua

require"temp_other.lua"
foo() -- вызвана из temp_other.lua
источник

RM

Roy Mustang in pro.lua
понял
источник

S

Snusmumriken in pro.lua
Ровно по этой причине используются МОДУЛИ как пространства имён:

-- temp.lua
-- локальное в temp.lua видимо только внутри temp.lua
local M = {}
function M.foo()
 print("meow")
end
return M

-- temp_other.lua
local M = {}
function M.foo()
 print("bark")
end
return M

-- main.lua
local tmp = require'temp'
local tmpother = require'temp_other'

tmp.foo() -- meow
tmpother.foo() -- bark

Просто файл скрипта который возвращает просто таблицу. В точке require обзовёшь её как хочешь, это твоя точка входа, как питоновые
import something AS sg
sg = require"something".
источник