首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >const中的Kotlin函数

const中的Kotlin函数
EN

Stack Overflow用户
提问于 2020-11-12 05:54:22
回答 3查看 114关注 0票数 0

我在学习kotlin,想知道如何在const中添加函数,

这里的JS例子..。

代码语言:javascript
复制
function suma (a, b){
    return a + b
}

console.log("sua suma::", suma(2,3))

function multiplica (a, b){
    return a * b
}

console.log("sua multiplik::", multiplica(2,3))

const operations = {
    suma,
    multiplica
}

console.log ("sum of first class::", operations.suma(2,3))
console.log ("mult of first class::", operations.multiplica(2,3))

那么,我如何在Kotlin身上实现同样的目标呢?

在这里,我已经尝试过:

代码语言:javascript
复制
fun suma(a: Int, b: Int): Int{
    return a + b
}

fun multiplica (a: Int, b: Int): Int{
    return a * b
}

const operations = {
    suma(),
    multiplica()
}

fun main() {
    println("sua suma:: ${suma(2, 3)}")
    println("sua multiplica:: ${multiplica(2, 3)}")

    println("sua multiplica:: ${operations.multiplica(2,3)}")
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-11-12 08:42:47

它可以使用object关键字来完成,如下所示:

代码语言:javascript
复制
fun suma(a: Int, b: Int): Int {
    return a + b
}

fun multiplica(a: Int, b: Int): Int {
    return a * b
}

fun main() {
    
    val operations = object {
        val _suma = ::suma
        val _multiplica = ::multiplica
    }

    println("sua suma:: ${operations._suma(2, 3)}")
    println("sua multiplica:: ${operations._multiplica(2, 3)}")
}

唯一的缺点是您必须为operations.XXXXX选择一个与引用函数的名称不同的名称:注意,var _sumafun suma。否则编译器将考虑递归问题。

票数 4
EN

Stack Overflow用户

发布于 2020-11-12 06:10:00

const的“只允许原语和字符串”

您要找的操作员是:(双冒号)

这方面的一个实例是

代码语言:javascript
复制
enum class Operations(function: KFunction<Int>) {
    Suma(function = ::suma),
    Multiplica(function = ::multiplica)
}
票数 2
EN

Stack Overflow用户

发布于 2020-11-12 06:33:30

这里的主要问题是Kotlin是一种静态类型化的语言,不像Javascript那样对包含任意属性的对象有相同的想法。

我对Kotlin有点陌生,所以也许有更好的方法来做这件事,但是我要做的是定义一个Map来做同样的事情:

代码语言:javascript
复制
fun suma(a: Int, b: Int): Int{
    return a + b
}

fun multiplica (a: Int, b: Int): Int{
    return a * b
}

val operations: Map<String, (a: Int, b:Int) -> Int> = hashMapOf(
        "suma" to ::suma,
        "multiplica" to ::multiplica)

fun main() {
    println("sua suma:: " + operations.get("suma")?.invoke(2, 3))
    println("sua multiplica:: " + operations.get("multiplica")?.invoke(2, 3))
}

结果:

代码语言:javascript
复制
sua suma:: 5
sua multiplica:: 6

请注意,operations是一个不可变的映射(“const”),因为它的内容一旦定义就不能更改。

访问和必须使用invoke似乎有点混乱。这似乎是因为Map只能包含可空类型。这就是我认为可能有更好的方法来做这件事的主要原因。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64798614

复制
相关文章

相似问题

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