Если бы все значения vol
были перед стрелкой, вы могли бы сделать это:
| h :: t when let vol = (h |> calcVol) in vol > maxVol -> // Something
Но let
назначения в предложении when
слева от стрелки не переносятся направая сторона.Демонстрация:
let f x = x + 5
let l = [1; 2]
match l with
| a :: b when let y = f a in y = 6 -> "Six"
| _ -> "Other"
Это работает и возвращает "Six"
.Но:
let f x = x + 5
let l = [1; 2]
match l with
| a :: b when let y = f a in y = 6 -> sprintf "Six = %d" y
| _ -> "Other"
Это не работает, выдавая ошибку:
ошибка FS0039: значение или конструктор 'y'
не определены.
Так что, к сожалению, у вас не может быть нужной однострочной версии , и вам придется пойти на более длинный подход (с let
, за которым следует if
, как вы продемонстрировали во второй половине своего ответа).