struct Parser<A> {
let parse: (String) -> (A,String)?
}
func character(condition:@escaping (Character) -> Bool) -> Parser<Character> {
return Parser(parse: {str in
guard let char = str.first, condition(char) else {
return nil
}
return (char,String(str.dropFirst()))
})
}
В приведенном выше коде мне сложно понять, что происходит.Более конкретно, что делает
let char = str.first, condition(char)
?Это даже законная конструкция?Код компилируется так, должно быть, но что происходит?let char = str.first
является назначением, а condition(char)
является логическим значением.Как вы можете иметь назначение, за которым следует запятая, за которой следует то, что вычисляется как логическое значение.