Germany | Finland | Saint Petersburg | Drive

1 лось, 2 лося, 5 лосей

Опубликовано в QLua

Функция для закоренелых эстетов. Подбирает правильную форму существительного взависимости от его количества.

 

function string.ending(what,end1,end234,default)
   what = tostring(math.floor(what))
   return what:sub(-2,-2) ~= "1" and ({ ["1"] = end1,
                                        ["2"] = end234,
                                        ["3"] = end234,
                                        ["4"] = end234 })[what:sub(-1)] or default
end

Lua - забавный язычок. Не приходилось встречать столь лаконичных функций на других языках. Проверим, как работает:

for i=0,30 do
print(i, string.ending(i,"лось","лося","лосей"),
string.ending(i,"секунда","секунды","секунд"),
string.ending(i,"облако","облака","облаков"))
end

 Получаем

0 лосей секунд облаков
1 лось секунда облако
2 лося секунды облака
3 лося секунды облака
4 лося секунды облака
5 лосей секунд облаков
6 лосей секунд облаков
7 лосей секунд облаков
8 лосей секунд облаков
9 лосей секунд облаков
10 лосей секунд облаков
11 лосей секунд облаков
12 лосей секунд облаков
13 лосей секунд облаков
14 лосей секунд облаков
15 лосей секунд облаков
16 лосей секунд облаков
17 лосей секунд облаков
18 лосей секунд облаков
19 лосей секунд облаков
20 лосей секунд облаков
21 лось секунда облако
22 лося секунды облака
23 лося секунды облака
24 лося секунды облака
25 лосей секунд облаков
26 лосей секунд облаков
27 лосей секунд облаков
28 лосей секунд облаков
29 лосей секунд облаков
30 лосей секунд облаков
Добавить комментарий


Архив QLua