Tag: 范围

如何在接收器的函数中使用本地扩展方法?

我发现了一个有趣的事情,但我做不到。 是否有任何方法使本地扩展方法在接收器的函数中可用。 val list = ArrayList<Any>(); fun <T> Array<T>.bind(context: MutableList<in T>, block: Array<T>.() -> Unit) { fun Array<T>.save() { context.addAll(this); } block(); } arrayOf(1, 2, 3).bind(list) { save(); //todo: how to bind extension in execution scope }; 我知道有一种替代方法,为接收器引入另一种类型,但我想避免它。 例如: interface Savable { fun save(); } fun <T> Array<T>.bind(context: MutableList<in T>, block: Savable.() -> Unit) { […]

密封的内部类

我想创建一个封闭的类的宇宙,其中每个子类是一些外部类的内部类。 我以为我可以使用密封的内部类作为层次结构的基础,如下所示: class Outer { fun foo(): Int { // … } inner sealed class InnerBase(val i: Int) { fun sharedFunctionality() { println(foo() + i) } abstract fun doIt() inner class Inner1: InnerBase(1) { override fun doIt() { blah() sharedFunctionality() bloo() } } } } 注意 Outer是一个适当的类,它可以有许多不同的实例。 每个实例应该能够创建将调用正确的foo Inner1 InnerBase子类的Universe是有限的 InnerBase有一些实例方法,被各种Inner子类使用,访问Outer的非静态方法foo InnerBase的具体子类(例如Inner1 )将参数传递给InnerBase的构造函数 但是,这个问题是我不知道如何在Outer构造一个Inner1类型的值。 我希望这会工作: […]

可视范围项目/模块

我有两个在Android Studio中链接的项目/模块。 其中一个作为一个Api /核心,我需要某些类只能从这个模块访问,但从所有的包(所以“默认”在这种情况下是无用的)访问。 但似乎在Java中它不是像内部(C#,SWIFT)的修饰符。 “模块”修改器是为Java 7提出的,但没有实现。 那么,是否有任何方法可以保护模块的类别不受外界影响,而不会将其范围限制在当前的包中? 谢谢!

Kotlin中使用数据类型Double的范围

fun calcInterest(amount: Double, interest: Double): Double { return(amount *(interest/100.0)) } fun main(args: Array<String>) { for (i in 1.0..2.0 step .5) { println("&10,000 at 5% interest is = ${calcInterest(10000.0,i)}") } } 我得到的错误说For循环范围必须有一个“Iterator()”方法。 它强调了我的双打(我在1.0..2.0) 我怎样才能在一个范围内使用双打? 重新加载范围( https://blog.jetbrains.com/kotlin/2013/02/ranges-reloaded/ )上的网站显示使用数据类型Double是好的。 我不知道我的是怎么了 我需要使用双打,因为我的利率是使用小数。 完全新编程,希望有人可以简单地解释。 谢谢! 编辑:添加步骤.5

Kotlin对象和伴侣对象如何与懒惰一起工作的内存

我无法找到任何有关对象,伴侣对象和懒惰如何处理记忆的地方。 任何人都可以在这里解释我如何使用内存? 谢谢

在Kotlin中,我可以创建一个向后计数的范围吗?

我查看了范围的文档 ,我看不到任何向后的范围。 是否有可能做到这样的事情: for (n in 100..1) { println(n) } 并得到结果: 100 99 98 …

在Kotlin中有没有什么方法可以将一个范围的值转换成另一个范围?

我有一个数值范围内的值(例如0..100 ),我想把它翻译成另一个范围,(例如0..9 )。 所以结果是: 50 -> 4或100 -> 9 ,… Kotlin有什么方法可以帮助我吗?

区分Kotlin中模棱两可的扩展

当我提到rng.max时,我遇到了编译器“不能在以下候选者中选择”的问题: rng:IntRange : inline val <T:Comparable<T>> ClosedRange<T>.max get() = endInclusive // max of range inline val <T:Comparable<T>> Iterable<T>.max get():T? = max() // max element 我认为这是因为一个ClosedRange实现ClosedRange和(间接通过IntProgression ) Iterable 。 如果我想编写一个适用于CharRange , LongRange和CharRange (可能但不一定是扩展ClosedRange )的扩展ClosedRange ,是否有任何可以明确解析为ClosedRange语法,而不是相似名称的Iterable在这种情况下扩展?

Kotlin – 限制扩展方法范围

有没有办法限制DSL中的扩展方法? 说我有这样的班级结构: class Outer { fun middle(op: Middle.() -> Unit): Middle { val middle = Middle() middle.op() return middle } } class Middle { fun inner(op: Inner.() -> Unit): Inner { val inner = Inner() inner.op() return inner } } class Inner fun outer(op: Outer.() -> Unit): Outer { val outer = Outer() outer.op() return […]

在kotlin中创建独占区域

我刚刚开始与Kotlin 。 我想创建范围从1到n ,其中n被excluded 。 我发现Kotlin有范围,我可以使用它们如下 1..n 但这是一个包含1和n范围。 我如何创建exclusive范围。