Kotlin 带参数的传递函数
我有一个方法:Kotlin 带参数的传递函数,kotlin,functional-programming,Kotlin,Functional Programming,我有一个方法: fun method(number: Int, name: String){ //TODO } 我想用参数将这个方法传递给类 class Test( val method: KFunction2<@ParamererName(name = "number") Int, @ParameterName(name="name") String, Unit>) fun function(number: Int, name: Stri
fun method(number: Int, name: String){
//TODO
}
我想用参数将这个方法传递给类
class Test(
val method: KFunction2<@ParamererName(name = "number") Int,
@ParameterName(name="name") String, Unit>)
fun function(number: Int, name: String) {
// function body
}
class Test(
val action: (Int, String) -> Unit,
val firstParam: Int,
val secondParam: String
) {
fun call() {
action(firstParam, secondParam)
}
}
// Usage
val test = Test(::function, 2, "John")
test.call() // invokes function(2, "John")
但我想和你这样的女人一起过关
测试(::方法(2,“John”)
-但它不起作用
可以用params传递方法引用吗?如何做到这一点?我可以想出三种方法来实现它 如果您参加了打印最终字符串的
打印机
课程
类打印机(val lazyValue:()->字符串){
趣味印刷品(){
println(this.lazyValue())
}
}
您可以将惰性硬编码到函数中(meh…)
fun lazyNumberName(数字:Int,名称:String):()->String={->
“$number$name”
}
val打印机=打印机(lazyNumberName(2,“john”))
printer.print()
您可以将函数调用包装在调用站点上的lambda中(我更喜欢这个)
fun numberName(编号:Int,名称:String):String=
“$number$name”
val printer=打印机({->numberName(2,“john”)})
printer.print()
或者,您可以定义一个使任何函数都变为惰性的lazy
函数。我对科特林不太了解,打不出来。以下是Typescript中的外观:
const lazy = <Args extends any[], R>(
f: (...args: Args) => R) =>
(...args:Args) => ():R =>
f(...args);
const add = (a:number, b:number) => a + b;
const lazyAdd = lazy(add);
const lazyAdd_1_2 = lazyAdd(1, 2);
const three = lazyAdd_1_2();// 3
const lazy=(
f:(…args:args)=>R)=>
(…args:args)=>():R=>
f(…args);
常量add=(a:number,b:number)=>a+b;
const lazyAdd=懒惰(add);
常数lazyAdd_1_2=lazyAdd(1,2);
常数三=懒散添加(1)和(2);//3.
以您最初的示例函数为例,类Test
可以如下所示进行实例化,使用一个函数call()
调用在构造函数中传递的带有两个参数的函数
class Test(
val method: KFunction2<@ParamererName(name = "number") Int,
@ParameterName(name="name") String, Unit>)
fun function(number: Int, name: String) {
// function body
}
class Test(
val action: (Int, String) -> Unit,
val firstParam: Int,
val secondParam: String
) {
fun call() {
action(firstParam, secondParam)
}
}
// Usage
val test = Test(::function, 2, "John")
test.call() // invokes function(2, "John")
不可能。你为什么要这么做?传递函数引用及其参数是没有意义的。只需使用这些参数调用函数,为什么要传递它?传递函数引用的全部目的是能够传递任何参数给它。我只是想知道是否可能,就像listener/Callback已经告诉过你的那样,除非你将它们定义为测试的参数,否则这是不可能的。同样,为什么要将参数传递给侦听器/回调引用?如果您已经知道这些参数,只需直接使用这些参数调用函数即可。你想干什么?解释您的上下文。好的,然后您可以使用
测试(::方法,2,“John”)
。不可能,这是唯一的方法。但是,如果需要,您可以编写自己的类并实现此功能。