Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
12. Перегружайте операторы
…В конце концов, если Страуструп использует операторы сдвига (>> и <<) для потокового ввода-вывода, чем вы хуже?
izip_fillwith0 = partial(izip_longest, fillvalue = "\x00")
convert_string_to_byte_list = partial(imap, ord)
xor_values = partial(reduce, operator.xor)
xor_strings = compose >> \
(apply, izip_fillwith0) >> \
(imap, convert_string_to_byte_list) >> \
(imap, xor_values) >> \
(imap, chr) >> \
"".join
ARG = ("abcdef", "ABCDEF", "5678900")print "Day %s of %s" % (index, total)// Выразить одну единицу измерения через другие [<Measure>] type N = kg m / s // Указать соотношения одной единицы измерения с однотипными ей: let mlPerCubicCentimeter : float<ml/cm^3> = 1.0<ml/cm^3> let mlPerLiter : float<ml/L> = 1000.0<ml/L> // Температуры и единицебезопасные функции перевода: [<Measure>] type degC // temperature, Celsius/Centigrade [<Measure>] type degF // temperature, Fahrenheit let convertCtoF ( temp: float<degC> ) = 9.0<degF> / 5.0<degC> * temp + 32.0<degF> let convertFtoC ( temp: float<degF> ) = 5.0vdegC> / 9.0<degF> * ( temp - 32.0<degF>) // И можно даже наложить ограничение на единицы измерения аргументов функций, // при этом не указывая их явно let genericSumUnits ( x : float<'u>) (y: float<'u>) = x + y
Единицы измерений нужны в решении далеко не всех задач.
Сложный синтаксис приводит к невозможности реализации систем метапрограммирования
#define a=b a=0-b
Код, который невозможно поддерживать (часть 2)