Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 在Kotlin中适当地强制转换类方法_Swift_Kotlin - Fatal编程技术网

Swift 在Kotlin中适当地强制转换类方法

Swift 在Kotlin中适当地强制转换类方法,swift,kotlin,Swift,Kotlin,在Swift中,如果您可以执行以下操作: 类MyExampleClass{ func myMethod_uu值:Int{ } } let function=MyExampleClass.myMethod//MyExampleClass的签名->Int-> 让示例=MyExampleClass 函数示例10//咖喱 我如何在科特林实现同样的目标 class MyExampleClass { fun myMethod(value: Int) { } } val function

在Swift中,如果您可以执行以下操作:

类MyExampleClass{ func myMethod_uu值:Int{ } } let function=MyExampleClass.myMethod//MyExampleClass的签名->Int-> 让示例=MyExampleClass 函数示例10//咖喱 我如何在科特林实现同样的目标

class MyExampleClass {

   fun myMethod(value: Int) {

   }

}

val function = MyExampleClass::myMethod // Signature of KFunction2<MyExampleClass, Int, Unit> -- WTF 
  1. You can write
    function(exampleClass, 10)
    instead of
    function.invoke
    ;

  2. Kotlin standard library doesn't include currying, but it's easy to implement yourself:

    fun <A, B, C> ((A, B) -> C).curry() = { x: A -> { y: B -> this(x, y) } }
    
    val function = MyExampleClass::myMethod.curry()
    function(exampleClass)(10)
    
    类MyExampleClass{ fun myMethodvalue:Int{ } } val function=MyExampleClass::myMethod//KFunction2的签名-WTF 您可以编写functionexampleClass,10而不是function.invoke

    Kotlin标准库不包括咖喱,但很容易自己实现:

    function(exampleClass, 10)
    
    您可以编写functionexampleClass,10而不是function.invoke

    Kotlin标准库不包括咖喱,但很容易自己实现:

    function(exampleClass, 10)
    
    因为invoke方法是一个操作符,所以可以使用语法来调用它

    /** @return partially applied this with the 1st parameter fixed to the specified value */
    fun <A, B, C> ((A, B) -> C).invoke(a: A): (B) -> C = { this(a, it) }
    
    我将使用部分应用程序来避免不必要的Function2实例化,而不是像Alexey建议的那样使用curry:

    function(exampleClass)(10)
    
    而不是Alexey的解决方案:

    因为invoke方法是一个操作符,所以可以使用语法来调用它

    /** @return partially applied this with the 1st parameter fixed to the specified value */
    fun <A, B, C> ((A, B) -> C).invoke(a: A): (B) -> C = { this(a, it) }
    
    我将使用部分应用程序来避免不必要的Function2实例化,而不是像Alexey建议的那样使用curry:

    function(exampleClass)(10)
    
    而不是Alexey的解决方案:


    最坏的情况下,你总是可以做{obj:MyExampleClass->{i:Int->obj.myMethodi}}最坏的情况下,你总是可以做{obj:MyExampleClass->{i:Int->obj.myMethodi}你能不能和Alexey的答案相比更具体一点,为什么这更好?如果你能告诉我它的优越性,我很乐意接受这个答案。具体来说,我将使用部分应用程序来避免不必要的实例化,如果可以在Alexey解决方案中更详细地解释这一点,那么将创建两个函数实例:Function2和Function1。在我的解决方案中,只创建Function1,因为它避免了创建函数来调用它的步骤。这样比较更明显:functionExampleClas10 function.curryExampleClas10您还可以注意到他的curry函数中的代码块数量更高。从各个角度来看,这一切都很合适。请你把它和亚历克赛的答案做一个比较,再具体一点,为什么这样更好?如果你能告诉我它的优越性,我很乐意接受这个答案。具体来说,我将使用部分应用程序来避免不必要的实例化,如果可以在Alexey解决方案中更详细地解释这一点,那么将创建两个函数实例:Function2和Function1。在我的解决方案中,只创建Function1,因为它避免了创建函数来调用它的步骤。这样比较更明显:functionExampleClas10 function.curryExampleClas10您还可以注意到他的curry函数中的代码块数量更高。从各个角度看都很合适。