F # соответствует -> - PullRequest
       25

F # соответствует ->

3 голосов
/ 28 декабря 2010

Я хочу сделать что-то подобное (синтаксис Nemerle)

def something =
match(STT)
    | 1 with st= "Summ"
    | 2 with st= "AVG" =>
        $"$st : $(summbycol(counter,STT))"

на F #, так ли это реально с F #?

Ответы [ 2 ]

13 голосов
/ 28 декабря 2010

Прямой поддержки для этого нет, но вы также можете имитировать эффект:

let 1, st, _ | 2, _, st = stt, "Summ", "AVG"
sprintf "%s %a" st summbycol (counter, stt)
8 голосов
/ 28 декабря 2010

Если я вас правильно понимаю, вы бы хотели присвоить какое-то значение переменной как части шаблона. В F # нет прямой поддержки этого, но вы можете определить параметризованный активный шаблон, который делает это:

let (|Let|) v e = (v, e)

match stt with 
| Let "Summ" (st, 1) 
| Let "AVG" (st, 2) -> srintf "%s ..." st

Строка после Let является параметром шаблона (и передается как значение v). Затем шаблон возвращает кортеж, содержащий связанное значение и исходное значение (так что вы можете сопоставить исходное значение во втором параметре кортежа.

...