我可以以某种方式发送数学符号(+, - ,*)作为函数参数吗?我想将reduce()
函数用于不同的符号。
答案 0 :(得分:9)
在swift中,是指定数学运算的函数名称。要将sign作为参数传递,参数类型必须是带两个数字并返回数字的函数。如果您命令+单击任何符号,您将看到其定义如下:
public func +(lhs:UInt8,rhs:UInt8) - > UINT8
public func +(lhs:Int8,rhs:Int8) - > INT8
public func +(lhs:UInt16,rhs:UInt16) - > UINT16
public func +(lhs:Int16,rhs:Int16) - > INT16
public func +(lhs:UInt32,rhs:UInt32) - > UInt32的
public func +(lhs:Int32,rhs:Int32) - > INT32
public func +(lhs:UInt64,rhs:UInt64) - > UINT64
public func +(lhs:Int64,rhs:Int64) - > Int64的
public func +(lhs:UInt,rhs:UInt) - > UINT
public func +(lhs:Int,rhs:Int) - > INT
在您的情况下,您的reduce函数应如下所示
func reduce(sign: (Int,Int)->Int) -> Int{
return sign(2,3)
}
reduce(*)
reduce(-)
答案 1 :(得分:5)
func doSomeCalculation(_ fun:((Int, Int) -> Int)) -> Int {
return fun(12,13)
}
doSomeCalculation(+) // 25
doSomeCalculation(-) // -1
UInt
,IntXX
等
+
基本上只是一个函数,它接受两个参数并返回它的总和。由于func
tions是任何其他对象,因此您可以将它们传递给它们。
您可以将+
传递给reduce
。
答案 2 :(得分:4)
是的,您可以将任何二元运算符发送到reduce()
函数,提供原始值并且集合中的元素具有相同的类型,因此可以应用运算符。
将运算符视为函数/闭包,您将理解为什么在Swift中可以实现这一点。实际上,运算符就像函数一样 - 它们被命名为闭包。
还要考虑添加新运算符的方式 - 使用运算符名称定义一个函数,该函数采用与运算符arity相等的多个参数。
因此,以下语法正确,并提供预期的输出(6
):
[1,2,3].reduce(0, combine: +)
答案 3 :(得分:-2)
作为角色发送,然后切换到识别:
func acceptASign(sign: Character) {
switch sign {
case "+":
//do some addition
case "-":
//do some subtraction
case "*":
//do some multiplication
case "/":
//do some division
default:
break;
}
}