首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Kotlin中声明可以是字符串或函数的函数参数?

如何在Kotlin中声明可以是字符串或函数的函数参数?
EN

Stack Overflow用户
提问于 2017-10-11 18:23:39
回答 2查看 99关注 0票数 3

在下面的函数中,我希望将html标记的属性传递给它。这些属性可以是字符串(test("id", "123"))或函数(test("onclick", {_ -> window.alert("Hi!")})):

代码语言:javascript
复制
fun test(attr:String, value:dynamic):Unit {...}

我试图将参数value声明为Any,这是Kotlin中的根类型。但是函数不是Any类型的。将类型声明为dynamic有效,但是

  • dynamic不是一种类型。它只是关闭了对参数的输入检查。
  • dynamic只为kotlin-js工作(Javascript)。

如何用Kotlin (Java)编写这个函数?函数类型与任何函数类型的关系如何?是否有既包括函数类型又包括Any的类型?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-11 18:34:25

您可以重载该函数:

代码语言:javascript
复制
fun test(attr: String, value: String) = test(attr, { value })

fun test(attr: String, createValue: () -> String): Unit {
    // do stuff
}
票数 6
EN

Stack Overflow用户

发布于 2017-10-11 19:29:46

你可以写:

代码语言:javascript
复制
fun test(attr: String, string: String? = null, lambda: (() -> Unit)? = null) {
  if(string != null) { // do stuff with string }
  if(lambda != null) { // do stuff with lambda }
  // ...
}

然后以下列方式调用该函数:

代码语言:javascript
复制
test("attr")
test("attr", "hello")
test("attr", lambda = { println("hello") })
test("attr") { println("hello") }
test("attr", "hello", { println("hello") })
test("attr", "hello") { println("hello") }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46695106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档