Kotlin手寫RxJava變換符
本文鏈接,點擊這里進入
1、核心點:中轉站存儲之前的數據
2、三行代碼實現RxJava
使用create、map、observer
fun main() {// create構造出RxJavaCore存放,lambda執行完的結果create{"WCH"}.map{ // 擴展出map方法,接收原先RxJavaCore的value數據,lambda方法執行完后,構造出RxJavaCore繼續保存結果this + ":Hello world!"}.observer{ // 進行消費println(this)}
}
自定義操作符
class RxJavaCore<T>(var value:T)
// action()執行完的結果,用RxJavaCore保存起來
inline fun<O> create(action:()->O) : RxJavaCore<O>{return RxJavaCore(action())
}
// map
inline fun<I, O> RxJavaCore<I>.map(action: I.() -> O) : RxJavaCore<O>{return RxJavaCore(action(value))
}
// 監聽者
inline fun<I> RxJavaCore<I>.observer(action:I.() -> Unit){action(value)
}
簡化版本(一)
class RxJavaCore<T>(var value:T)
inline fun<O> create(action:()->O):RxJavaCore<O> = RxJavaCore(action())
inline fun<I,O> RxJavaCore<I>.map(action: (I) -> O):RxJavaCore<O> = RxJavaCore(action(value))
inline fun<I> RxJavaCore<I>.observer(action:(I) -> Unit) = action(value)
簡化版本(二)
1、將Helper轉換為Any(泛型) ====> 擴展函數的傳遞過程
inline fun<R> create(action:()->R):R = action() // 保存到泛型中,R中
inline fun<I,R> I.map(action: (I) -> R):R= action(this) // 給I擴展,自動拿到上一步驟,泛型里面R的數據
inline fun<I> I.observer(action:(I) -> Unit) = action(this)