Swift 在Kotlin中适当地强制转换类方法
在Swift中,如果您可以执行以下操作: 类MyExampleClass{ func myMethod_uu值:Int{ } } let function=MyExampleClass.myMethod//MyExampleClass的签名->Int-> 让示例=MyExampleClass 函数示例10//咖喱 我如何在科特林实现同样的目标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
class MyExampleClass {
fun myMethod(value: Int) {
}
}
val function = MyExampleClass::myMethod // Signature of KFunction2<MyExampleClass, Int, Unit> -- WTF
- You can write
function(exampleClass, 10)
instead of function.invoke
;
- 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函数中的代码块数量更高。从各个角度看都很合适。