我一直认为F#有两种不同的方式来传递参数,咖喱风格和元组风格。 这实际上是对的吗?
不仅仅是一种风格,咖喱风格和参数可以是简单的值或元组。
e.g。
someFunc (a,b) =
这不是一个带有一个咖喱风格参数的函数,它恰好是一个元组? 允许我使用pipleline运算符将元组传递给此函数? (命名元组元素的地方)
(1,2) |> someFunc
这是对的吗?
答案 0 :(得分:6)
这样可以正常工作 - 区别在于你有
let f (a,b) = ...
let f2 a b = ...
那么你可以轻松地创建一个部分应用的f2,但是对于f来说它并不是很好用 - 你必须这样做
let partial = fun t -> f (1,t)
let partial2 = f2 1
答案 1 :(得分:5)
是的,所有F#功能都是“咖喱风格”。如果您有以下定义:
let someFunc (a,b) = a + b
你有一个函数,它接受一个参数,一个元组,它被模式匹配分解(是的,模式匹配在像这样的令人惊讶的甜蜜地方可用)。它等同于以下定义,它将模式匹配移动到函数体:
let someFunc t =
match t with
| a, b -> a + b
这相当于
let someFunc = function
| a, b -> a + b
第一个版本,在参数本身中使用模式匹配,在这个简单的命名绑定实例中显然更可取。
请注意,F# methods是“元组样式”(这是F#粘合到标准.NET面向对象功能的地方之一)。