ЕЧИСЛО, ЕТЕКСТ и прочие радости с оператором is

#АнатомияФункций - основы



Всем привет!

Вроде несколько раз обсуждали этот вопрос – и тем не менее продолжают возникать затруднения с определением того, принадлежит ли значение к определенному типу (если быть точным – совместим ли тип значения с определённым типом).

По этому поводу код:

let

from = #table({"val"},{{null},{1.23},{"текст"},{false},{#date(2024,2,3)},{#datetime(2024,2,3,12,34,56)},{{1..3}},{[a=1]},{#table({},{})},{(x)=>x}}),

lst={ {"ЕПУСТО",(x)=>x=null}, //можно и x is null

{"ЕЧИСЛО",(x)=>x is number},

{"ЕТЕКСТ",(x)=>x is text},

{"ЕЛОГИЧ",(x)=>x is logical},

{"ЕДАТА",(x)=>x is date},

{"ЕДАТАВРЕМЯ",(x)=>x is datetime},

{"ЕСПИСОК",(x)=>x is list},

{"ЕЗАПИСЬ",(x)=>x is record},

{"ЕТАБЛИЦА",(x)=>x is table},

{"ЕФУНКЦИЯ",(x)=>x is function},

{"ЕЧТОУГОДНО",(x)=>x is any},

{"ЕВООБЩЕНИЧЕГО",(x)=>x is none}},

to=List.Accumulate(lst,from,(s,c)=>Table.AddColumn(s,c{0},(r)=>c{1}(Record.Field(r,"val"))))

in

to




Собственно, кроме кода тут и говорить почти нечего – оператор is позволяет осуществить проверку, совместим ли тип значения с соответствующим примитивом, т.е. грубо говоря, позволяет проверить является ли значение числом, текстом, таблицей или функцией. За техническими деталями, без обид, отправляю в справку. А здесь, чисто для иллюстрации, прошу обратить внимание на два последних столбца – все значения совместимы с any (все они чем-то да являются) и ни одно не совместимо с none (т.е. даже null больше, чем просто ничего).



Как-то так – сугубо технический пост, чтобы было на что давать ссылку)))



Надеюсь, было полезно.

Всех благ!

@buchlotnik