//Kotlin中手写RxJava原理实现
fun main() {
//create 输入源:没有任何参数, 输出源:所有类型
//map 输入源:create输出源的valueTtem, 输出源: 所有类型
//observer 输入源:map存储的valueItem, 消费完成。
create {
"yuknight"
123
true
3.13f
}.map {
"上面传进来的值是:$this"
}.map {
"[$this]"
}.observer {
println(this)
}
}
// 中转站,保存我们的记录 //valueItem == create操作符,最后一行的返回值,流向此处
class RxJavaClassObject<T>(var valueItem: T)//主构造,接收你传递进来的信息,此消息是create最后一行
inline fun <I> RxJavaClassObject<I>.observer(observerAction: I.() -> Unit) = observerAction(valueItem)
//inline fun <I> RxJavaClassObject<I>.observer(observerAction: I.() -> Unit): Unit {
// observerAction(valueItem)
//}
inline fun <I, O> RxJavaClassObject<I>.map(mapAction: I.() -> O): RxJavaClassObject<O> =
RxJavaClassObject(mapAction(valueItem))
//inline fun <I, O> RxJavaClassObject<I>.map(mapAction: I.() -> O): RxJavaClassObject<O> {
// return RxJavaClassObject(mapAction(valueItem))
//}
inline fun <OUTPUT> create(action:()-> OUTPUT) = RxJavaClassObject(action())
//inline fun <OUTPUT> create(action: () -> OUTPUT): RxJavaClassObject<OUTPUT> {
// return RxJavaClassObject(action())
//}