Обработка односимвольных строк - в функции или в ее вызывающей стороне? ssr () - PullRequest
0 голосов
/ 26 мая 2020

Каков общий способ работы со строками в q, в каком-то смысле, кто отвечает за обработку односимвольной строки: сама функция или пользователь, который ее запускает?

Пример:

$ q
KDB+ 3.6 2019.04.02 Copyright (C) 1993-2019 Kx Systems
m32
q)ssr["bar";"r";"z"] /looks good at a first glance
"baz"
q)ssr["bar";"?";"z"] /but wait, nothing happens here
"bar"
q)ssr["bar";(),"?";"z"] /convert 1-char to list: ok
"zzz"

Посмотрите разницу между отправкой одной буквы (r) и вопросительного знака (?). Сама по себе отправка одного символа ? не дала ничего полезного.

Это функция из ssr? И каков общий случай отправки / получения одного символа - кто в большинстве случаев должен нести ответственность за работу с атомами и списками?

Upd: Спасибо @terrylynch за указание на это особенность ss / ssr:

q)ssr["bar?";"?";"z"]
"barz"

1 Ответ

2 голосов
/ 26 мая 2020

Это особенность ss, которая, в свою очередь, делает его функцией ssr, поскольку ssr использует ss. См. Комментарий «поддерживает некоторые из возможностей сопоставления с образцом подобного»: https://code.kx.com/q/ref/ss/

Похоже, у него есть проверка на поиск символа / строки специального (связанного с регулярным выражением) символы - если это один символ, просто обрабатывайте его как символ, если это строковый тип, считайте его шаблоном регулярного выражения.

...