小编vod*_*dan的帖子

Kotlin NDArray具有带通用返回类型的lambda构造函数

我正在尝试在Kotlin中创建一个非常简单的通用NDArray类,该类将lambda表达式用作初始化函数。

class NDArray<T>(i: Int, j: Int, f: (Int) -> T) {
    val values: Array<T> =  Array(i * j, f)
}
Run Code Online (Sandbox Code Playgroud)

典型的用法是:

fun main(args: Array<String>){
    val m = NDArray(4, 4, ::zero)
}

fun zero(i: Int) =  0.0
Run Code Online (Sandbox Code Playgroud)

我的问题是Kotlin编译器抱怨构造函数中的值初始化

values = Array(i * j, f)
Run Code Online (Sandbox Code Playgroud)

通过说“不能使用'T'作为化类型参数。改为使用类”。为什么呢

编辑:

如果我改为用自己的MyArray代替Kotlin Array实现,则会编译:

class NDArray<T>(i: Int, j: Int, f: (Int) -> T) {
    val values: MyArray<T> =  MyArray(i * j, f)
}

class MyArray<T>(i:Int, init: (Int) -> T) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

不确定当Kotlin具有相同的构造函数时,为什么Kotlin将MyArray与常规Array区别对待吗?

arrays generics type-erasure kotlin

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

无法重新分配局部变量

fun test(temp: Int) {
    temp = 5
}
Run Code Online (Sandbox Code Playgroud)

编译器抛出一个错误,说"不能重新分配val".

局部变量是否仅在Kotlin中读取?

kotlin

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

Zip 3等长的列表

在Kotlin stdlib中是否有标准操作可以迭代3个(或更多)列表的压缩?

实际上应该做到:

list1.zip(list2).zip(list3) { (a, b), c -> listOf(a, b, c)}
Run Code Online (Sandbox Code Playgroud)

kotlin

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

在kotlinx.html DSL中编写原始html代码

我正在使用Kotlin的html库kotlinx.html进行动态html构建.

对于调试建议我想写一个标签作为原始html.但我找不到任何方法可以做到这一点.简单的文本添加替换字符,如<代码,所以它没有帮助:

StringBuilder().appendHTML().html {
    body {
        +"""
        <form action="http://courier-voddan.rhcloud.com/customer/new_task" method="get">
            get=form
            id=3333
            <button type="submit">ok</button>
        </form>
        """.trimIndent()
    }
}
Run Code Online (Sandbox Code Playgroud)

html kotlin

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

如何使用kotlin在android中初始化小部件

我已经开始学习在android中使用kotlin语言并在初始化我的按钮变量时遇到问题,因为在定义我的变量时,它要求在使用null值初始化时给出一些初始值并在oncreate函数中绑定变量

kotlin.KotlinNullPointerException

这是我的代码

class AddsFragment : Fragment() {

    var Add: Button = null!!

    override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val Rootview = inflater!!.inflate(R.layout.clubsfragment, null, false)
        Add = Rootview.findViewById(R.id.add) as Button
        return Rootview
    }
}
Run Code Online (Sandbox Code Playgroud)

android nullpointerexception kotlin kotlin-android-extensions

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

Kotlin编程基础知识

我正在努力学习Kotlin,我在使用函数时遇到了一个问题.

fun main(args: Array<String>) {
    println(max(20, 10))
}

fun max(a: Int, b: Int) = if (a > b) a else b
Run Code Online (Sandbox Code Playgroud)

这里我有一个函数MAX.现在上面的实现和函数MAX的下面的实现有什么区别,虽然两者都给出相同的输出.

fun max(a: Int, b: Int): Int?{
    if(a > b)
        return a
    else
        return b
}
Run Code Online (Sandbox Code Playgroud)

kotlin

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

返回if/else条件的值,但也运行代码

我是Kotlin的新手,但我非常喜欢它.当你可以将三行代码合二为一时,会有一种美妙的感觉.现在我经常发现自己正在查看我的代码并思考"这里有一些冗余.应该有一种更简洁的方法来实现它." 当我做一些搜索时,Kotlin经常提供更简洁的方式.

这是一个问题,我感觉应该有一个简单,简洁的Kotlin解决方案,但我不知道它.希望你能开导我!

像这个人为的例子一样代码:

fun doSomething(): Boolean {
    if (randomInt % 2 == 0) {
        foo = Foo()
        true
    } else {
        bar = null
        false
    }
}
Run Code Online (Sandbox Code Playgroud)

根据if条件,我想运行一些代码,然后返回条件的值.令我烦恼的是,我必须明确说"如果条件成立,则返回true.如果是假,则返回false." 这似乎是多余的.当然,我可以说return randomInt % 2,但我想根据它是否真实运行代码.

是否有一个我不知道的魔术师Kotlin?我是否应该为我处理这种情况,尽管调用的语法与if语句不同?是否有某种映射功能,或某种方式重载如果?似乎应该有一个简洁,聪明的答案,但它不会来找我.

android kotlin

0
推荐指数
2
解决办法
1154
查看次数