Size: a a a

2020 October 18

VK

Vic Khov in F# Chat
А есть ли какой-то способ для паттерн-матчинга строки по шаблону/формату (который можно было бы задать как StringFormat<'T, 'Result>  или каким-либо способом позволяющим описать какие типы ожидаем встретить в строке)

Ну т.е. есть ли способ сделать что-то вроде:
let matchLikeSprintf string patternToMatch =
 ...
[<EntryPoint>]
let main argv =
 matchLikeItSprintf "42 42.5 iamstring" "%d %f %s" // возвращает true
 matchLikeItSprintf "42 iamstring" "%d %f %s" // возвращает false

?
источник

I

Igor in F# Chat
Vic Khov
А есть ли какой-то способ для паттерн-матчинга строки по шаблону/формату (который можно было бы задать как StringFormat<'T, 'Result>  или каким-либо способом позволяющим описать какие типы ожидаем встретить в строке)

Ну т.е. есть ли способ сделать что-то вроде:
let matchLikeSprintf string patternToMatch =
 ...
[<EntryPoint>]
let main argv =
 matchLikeItSprintf "42 42.5 iamstring" "%d %f %s" // возвращает true
 matchLikeItSprintf "42 iamstring" "%d %f %s" // возвращает false

?
В suave есть всякие sscanf, которые как printf только наоборот

Но вряд ли ты захочешь тащить целый web-framework
Вот тут есть пример, как самому написать http://www.fssnip.net/4I/title/sscanf-parsing-with-format-strings
источник

VK

Vic Khov in F# Chat
Igor
В suave есть всякие sscanf, которые как printf только наоборот

Но вряд ли ты захочешь тащить целый web-framework
Вот тут есть пример, как самому написать http://www.fssnip.net/4I/title/sscanf-parsing-with-format-strings
спасибо, примерно то, что мне и нужно
источник

ДБ

Дмитрий Башинский... in F# Chat
Vic Khov
А есть ли какой-то способ для паттерн-матчинга строки по шаблону/формату (который можно было бы задать как StringFormat<'T, 'Result>  или каким-либо способом позволяющим описать какие типы ожидаем встретить в строке)

Ну т.е. есть ли способ сделать что-то вроде:
let matchLikeSprintf string patternToMatch =
 ...
[<EntryPoint>]
let main argv =
 matchLikeItSprintf "42 42.5 iamstring" "%d %f %s" // возвращает true
 matchLikeItSprintf "42 iamstring" "%d %f %s" // возвращает false

?
я такое написюкал и юзаю для валидаций
источник

ДБ

Дмитрий Башинский... in F# Chat
источник

G

Group in F# Chat
Переслано от Anton
источник

PD

Prunkles Dreemurr in F# Chat
Vic Khov
А есть ли какой-то способ для паттерн-матчинга строки по шаблону/формату (который можно было бы задать как StringFormat<'T, 'Result>  или каким-либо способом позволяющим описать какие типы ожидаем встретить в строке)

Ну т.е. есть ли способ сделать что-то вроде:
let matchLikeSprintf string patternToMatch =
 ...
[<EntryPoint>]
let main argv =
 matchLikeItSprintf "42 42.5 iamstring" "%d %f %s" // возвращает true
 matchLikeItSprintf "42 iamstring" "%d %f %s" // возвращает false

?
Помню, когда задавал аналогичный вопрос, мне ответили "Кажется ты хочешь переизобрести регексы"
источник
2020 October 19

SN

Shub Niggurath in F# Chat
Vic Khov
А есть ли какой-то способ для паттерн-матчинга строки по шаблону/формату (который можно было бы задать как StringFormat<'T, 'Result>  или каким-либо способом позволяющим описать какие типы ожидаем встретить в строке)

Ну т.е. есть ли способ сделать что-то вроде:
let matchLikeSprintf string patternToMatch =
 ...
[<EntryPoint>]
let main argv =
 matchLikeItSprintf "42 42.5 iamstring" "%d %f %s" // возвращает true
 matchLikeItSprintf "42 iamstring" "%d %f %s" // возвращает false

?
Помимо того, что это типикал регулярки, какие могут быть типы в строке?
источник

VS

Vladimir Shchur in F# Chat
Ayrat Hudaygulov
Ты прав. Надо делать ещё один континуе виз, где внутри вызвать .Result.Result
я подумал, что лучше сделать просто task unwrap вместо резалта внешнего, чисто через континьювиз наверное не получится
источник

VS

Vladimir Shchur in F# Chat
сча просто презентацию наконец посмотрел)
источник

SB

S B in F# Chat
Shub Niggurath
Помимо того, что это типикал регулярки, какие могут быть типы в строке?
Ну я так понял, что человек хочет ещё на уровень выше подняться и сказать, что тут у меня тип имейл, а какая стейтмашина описывает парсинг — это явно не указывается.
источник

AH

Ayrat Hudaygulov in F# Chat
Vladimir Shchur
я подумал, что лучше сделать просто task unwrap вместо резалта внешнего, чисто через континьювиз наверное не получится
task.ContinueWith(fun t -> (binderFunction t.Result).ContinueWith(fun innerTask -> innerTask.Result.Result))
источник

SB

S B in F# Chat
Не понимаю, правда, в чем проблема компилировать свои такие хотели в регулярки.
источник

SB

S B in F# Chat
Ayrat Hudaygulov
task.ContinueWith(fun t -> (binderFunction t.Result).ContinueWith(fun innerTask -> innerTask.Result.Result))
Чисто join.
источник

VS

Vladimir Shchur in F# Chat
Ayrat Hudaygulov
task.ContinueWith(fun t -> (binderFunction t.Result).ContinueWith(fun innerTask -> innerTask.Result.Result))
а ладно, пойдет) показалось что-то
источник

AH

Ayrat Hudaygulov in F# Chat
да, ебанина
источник

AH

Ayrat Hudaygulov in F# Chat
но шо делать
источник

VS

Vladimir Shchur in F# Chat
а подожди, может и нет
источник

VS

Vladimir Shchur in F# Chat
второй континьювиз слишком рано выполнится
источник

VS

Vladimir Shchur in F# Chat
и заблочится!
источник