为什么我们不在 Elm 函数组合中指定参数?
Why we do not specify parameters in Elm function composition?
我查看了函数组合的各种示例,它们都具有说明输入和输出参数的类型定义。另一方面,函数定义不传递参数。是因为所有函数都具有相同的类型签名吗?我看到的例子都是
fn: String -> String
你能编写一个传递了多个参数的函数吗?
注意,我不了解 Elm,但我想我可以笼统地回答这个问题。
假设你有一个函数:
function addTwo(n) {
return n + 2;
}
并说您想为该函数指定另一个名称,无论出于何种原因。你可以这样写:
function otherName(n) {
return addTwo(n);
}
你指定otherName
的参数,然后手动传给addTwo
。
但是等等,如果您所做的只是将参数直接传递给内部函数,是否有必要指定参数?为什么不直接写:
otherName = addTwo
这与问题有什么关系?假装addTwo
是一个作文。它需要一个数字,returns 一个数字。就像在第二个示例中一样,您可以显式地写出参数,但这不是必需的。实际上,当您将组合分配给变量时,您所做的就是为组合函数命名。参数与此无关。
您可以在 elm 中定义一个具有多个参数的函数,为此您需要在函数签名类型定义中使用(来自)两个箭头:
divide: Float -> Float -> String
divide x y =
x / y |> toString
因此:第一个参数的类型,然后是第二个参数的类型,然后是 return 值的类型。
中有更多详细信息
Elm 函数类型定义是这样工作的:
myFunction : FirstArg -> SecondArg -> ... -> LastArg -> ReturnType
示例:
-- one argument
sqrt : Float -> Float
-- two arguments
rem : Int -> Int -> Int
-- no arguments (constant!)
pi : Float
组合函数具有此类型签名:
(>>) : (a -> b) -> (b -> c) -> a -> c
如果加上括号,可以认为是
(>>) : (a -> b) -> (b -> c) -> (a -> c)
因此,它需要一个参数的两个函数和一个参数的另一个函数returns。
如果你想将它与带有更多参数的函数一起使用,你必须部分应用它们,使它们只需要一个参数:
((+) 5) >> ((*) 2)
-- (+) needs two arguments
-- (+) 5 needs one argument
-- same with (*) and (*) 2
-- the above line is the same as
\num -> 2 * (5 + num)
我查看了函数组合的各种示例,它们都具有说明输入和输出参数的类型定义。另一方面,函数定义不传递参数。是因为所有函数都具有相同的类型签名吗?我看到的例子都是
fn: String -> String
你能编写一个传递了多个参数的函数吗?
注意,我不了解 Elm,但我想我可以笼统地回答这个问题。
假设你有一个函数:
function addTwo(n) {
return n + 2;
}
并说您想为该函数指定另一个名称,无论出于何种原因。你可以这样写:
function otherName(n) {
return addTwo(n);
}
你指定otherName
的参数,然后手动传给addTwo
。
但是等等,如果您所做的只是将参数直接传递给内部函数,是否有必要指定参数?为什么不直接写:
otherName = addTwo
这与问题有什么关系?假装addTwo
是一个作文。它需要一个数字,returns 一个数字。就像在第二个示例中一样,您可以显式地写出参数,但这不是必需的。实际上,当您将组合分配给变量时,您所做的就是为组合函数命名。参数与此无关。
您可以在 elm 中定义一个具有多个参数的函数,为此您需要在函数签名类型定义中使用(来自)两个箭头:
divide: Float -> Float -> String
divide x y =
x / y |> toString
因此:第一个参数的类型,然后是第二个参数的类型,然后是 return 值的类型。
中有更多详细信息Elm 函数类型定义是这样工作的:
myFunction : FirstArg -> SecondArg -> ... -> LastArg -> ReturnType
示例:
-- one argument
sqrt : Float -> Float
-- two arguments
rem : Int -> Int -> Int
-- no arguments (constant!)
pi : Float
组合函数具有此类型签名:
(>>) : (a -> b) -> (b -> c) -> a -> c
如果加上括号,可以认为是
(>>) : (a -> b) -> (b -> c) -> (a -> c)
因此,它需要一个参数的两个函数和一个参数的另一个函数returns。
如果你想将它与带有更多参数的函数一起使用,你必须部分应用它们,使它们只需要一个参数:
((+) 5) >> ((*) 2)
-- (+) needs two arguments
-- (+) 5 needs one argument
-- same with (*) and (*) 2
-- the above line is the same as
\num -> 2 * (5 + num)