Re: Context Receivers
От: kov_serg Россия  
Дата: 11.05.22 09:35
Оценка:
Здравствуйте, kov_serg, Вы писали:

_>И почему этого раньше не было.

Теперь можно писать так:
class ModuleArithmetic(val module:Int) { }
class SaturationArithmetic(val low:Int,val high:Int) { }
class Num(val v:Int) {}

context(ModuleArithmetic) operator fun Num.plus(rv:Num):Num {
    var r=(v+rv.v)%module
    if (r<0) r+=module
    return Num(r)
}
context(SaturationArithmetic) operator fun Num.plus(rv:Num):Num {
    var r=v+rv.v
    if (r<low) r=low
    if (r>high) r=high
    return Num(r)
}

fun main() {
    val a=Num(8)
    val b=Num(7)
    with( ModuleArithmetic(13) ) {
        var z=a+b
        println("z=${z.v}")
    }
    with( SaturationArithmetic(0,10) ) {
        var z=a+b
        println("z=${z.v}")
    }    
}

z=2
z=10
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.