标签: function-reference

如何引用 Raku 中的现有方法?

正如文档中所解释的,您可以通过在前面添加 sigil 来引用现有函数&

&say       # reference to the `say` function
&infix:<+> # reference to the infix `+` operator
Run Code Online (Sandbox Code Playgroud)

我该如何为方法执行此操作?

reference function raku function-reference

7
推荐指数
1
解决办法
78
查看次数

我可以将Kotlin中具有默认参数的函数的函数引用作为无参数函数得到吗?

是否可以获取具有默认参数的函数的函数引用,该默认参数指定为无参数调用?

InputStream.buffered()是一种扩展方法,可将a InputStream转换BufferedInputStream为8192字节的缓冲区大小。

public inline fun InputStream.buffered(bufferSize: Int = DEFAULT_BUFFER_SIZE): BufferedInputStream =
    if (this is BufferedInputStream) this else BufferedInputStream(this, bufferSize)

Run Code Online (Sandbox Code Playgroud)

我想有效地使用默认参数引用扩展方法,并将其传递给另一个函数。

fun mvce() {
    val working: (InputStream) -> InputStream = { it.buffered() }

    val doesNotCompile: (InputStream) -> BufferedInputStream = InputStream::buffered
    val alsoDoesNotCompile: (InputStream) -> InputStream = InputStream::buffered
}
Run Code Online (Sandbox Code Playgroud)

doesNotCompilealsoDoesNotCompile产生以下错误

类型不匹配:推断的类型为KFunction2,但应为(InputStream)-> BufferedInputStream

类型不匹配:推断的类型为KFunction2,但应为(InputStream)-> InputStream

我知道错误是因为InputStream.buffered()实际上(InputStream) -> BufferedInputStream不是,而是的快捷方式(InputStream, Int) -> BufferedInputStream,将缓冲区大小作为参数传递给BufferedInputStream构造函数。

动机主要是样式方面的原因,我宁愿使用已经存在的引用,也不愿在最后一刻创建引用。

val ideal: (InputStream) -> BufferedInputStream = InputStream::buffered// …
Run Code Online (Sandbox Code Playgroud)

kotlin function-reference

6
推荐指数
1
解决办法
56
查看次数

在kotlin中如何将函数引用放入数组中

具有类成员函数,例如:

private fun getData1(uuid:String): IData? {
    ...
}
private fun getData2(uuid:String): IData? {
    ...
}
private fun getData3(uuid:String): IData? {
    ...
}
Run Code Online (Sandbox Code Playgroud)

并想放入一个函数引用数组:

var funArray = ArrayList<(uuid: String) -> IData?> (
     this::getData1, 
     this::getData2, 
     this::getData3)
Run Code Online (Sandbox Code Playgroud)

它不编译:

None of the following functions can be called with the arguments 
supplied: 
public final fun <E> <init>(): kotlin.collections.ArrayList<(uuid: String) -> IData?> /* = java.util.ArrayList<(uuid: String) -> IData?> */ defined in kotlin.collections.ArrayList ...
Run Code Online (Sandbox Code Playgroud)

如果这样做:

var funArray: ArrayList<(uuid: String) -> IData?> = ArrayList<(uuid: String) -> IData?>(3)

funArray[0] …
Run Code Online (Sandbox Code Playgroud)

kotlin function-reference

1
推荐指数
1
解决办法
2050
查看次数

标签 统计

function-reference ×3

kotlin ×2

function ×1

raku ×1

reference ×1