6
編譯器接受infix +泛型方法,但是使用它的語法是什麼? 實施例,所給出的那些2層相同的方法(模任意通用型):我們可以在Kotlin中使用infix通用方法嗎?
infix inline fun Int1.plus1(i: Int1) = Int1(this.value + i.value)
infix inline fun <U> Int1.plus2(i: Int1) = Int1(this.value + i.value)
我可以寫:
Int1(3).plus1(Int1(4))
Int1(3) plus1 Int1(4)
Int1(3).plus2<Int>(Int1(4))
但這呼叫是無效:
Int1(3) plus2<Int> Int1(4)
有人能解釋我爲什麼?
但讓我們說你有一個'Int2'類來擴展'Int1'。然後你有這個函數:'infix inline fun U.print(i:Int)= println(「$ {U :: class} $ i」)'。如果你想讓'U'成爲'Int1',你可以這樣調用它:'Int2(5).print (4)'。是否可以使用中綴表示法進行此調用? –
marstran
@marstran是的,你必須把它的參數轉換爲預期的類型 'Int2(5)print 4.to(Int1 :: class)' –
這是行不通的。這個論點是一個普通的「Int」。這是'U'型接收機,這是問題所在。我是否必須演員呢?似乎有點奇怪,我只有在處理中綴函數時才需要使用投射。 – marstran