数学符号作为函数参数

时间:2015-12-28 15:22:02

标签: swift

我可以以某种方式发送数学符号(+, - ,*)作为函数参数吗?我想将reduce()函数用于不同的符号。

4 个答案:

答案 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

UIntIntXX

也可以这样做

+基本上只是一个函数,它接受两个参数并返回它的总和。由于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;
    }
}