Цитата |
---|
Ирина написал:
Код |
---|
min_stop_order = min_stop_order or stop_order
min_stop_order = (min_stop_order.condition_price <= stop_order.condition_price) and min_stop_order or stop_order |
зациклился мой мозг минут на 15 на первой итерации, а на второй ушел на больничный... Если знак не перепутан (ищем мы минимум), поясните, пожалуйста. |
Первая строчка — это типовой шаблон-паттерн первичной инициализации переменной с nil значением:
x = x or VЕсли
x == nil вначале, то ей будет присвоено значение
V, а если
x ~= nil, то она будет присвоена сама себе и сохранит значение.
В моём примере первая строчка нужна, чтобы не было ошибки во второй. Так как во второй строчке идёт обращение к элементу .condition_price переменной min_stop_order, и если эта переменная равна nil при первом проходе, то просто произойдёт ошибка обращение к элементу nil таблицы, то-есть
(nil).condition_priceСама вторая строчка, такой же стандартный шаблон-паттерн присвоения по условию:
x = (exp) and A or BЕсли
exp == true, то
x = A, иначе
x = B.
Цитата |
---|
Ирина написал: Из спортивного интереса, SearchItems тут сэкономит миллисекунду? Вроде того:Код |
---|
function fn (par)
if par = = 4 then
return true
else
return false
end
end
local i = SearchItems ( "stop_orders" , 0 , getNumberOf ( "stop_orders" ) - 1 , fn, "condition" )
local min_stop_order = nil
for i = 0 , # i - 1 do
local stop_order = getItem ( "stop_orders" , i)
min_stop_order = min_stop_order or stop_order
min_stop_order = (min_stop_order.condition_price < = stop_order.condition_price) and min_stop_order or stop_order
end
|
|
Наоборот, перебор такой же по времени, но при этом написали лишний код, усложнили, добавили выделением памяти под таблицу индексов и пр...
К тому же, у вас там ряд ошибок. Переменной i обозначили как саму таблицу индексов, так и сам индекс. А также убрали одну из проверок на возврат getItem значения nil, что лучше не делать, даже если вы уверены, что по индексам вам не должно вернуться nil. Это просто неправильный стиль программирования. Проверки на ошибки должны присутствовать всегда.
P.S. Смотрю, с утра были бурные обсуждения пары строчек кода... )))