Kotlin學習筆記(五十四)偏函數(shù)

/**
 * 偏函數(shù)
 * 1.偏函數(shù)是在科理化的基礎(chǔ)上得來
 * 2.原函數(shù)傳入部分參數(shù)后得到的新函數(shù)
 */
fun log3(tag: String, target: OutputStream, message: Any?) { //打印日志
    target.write("[$tag] $message\n".toByteArray()) //將日志信息寫入輸出流
}

fun <P1, P2, P3, R> Function3<P1, P2, P3, R>.curried3() //將科理化抽象成拓展函數(shù)
        = fun(p1: P1) = fun(p2: P2) = fun(p3: P3) = this(p1, p2, p3)

fun main(args: Array<String>) {
    //先科理化一部分參數(shù)獲得偏函數(shù)
    val consoleLogWithTag = (::log3.curried3())("One")(System.out)
    consoleLogWithTag("HelloWorld") //調(diào)用偏函數(shù)
    consoleLogWithTag("I like this world")

    val bytes = "Everything is nothing.".toByteArray(charset("GBK")) //獲取gbk編碼的字節(jié)
    val bgkText = makeStringFromGbkBytes(bytes) //調(diào)用偏函數(shù)
    println(bgkText)
}

val makeString = fun(byteArray: ByteArray, charset: Charset): String { //生成新字符串
    return String(byteArray, charset)
}

/**
 * 拓展方法,第一個參數(shù)p2表示的是Charset,之后fun傳入的p1表示的是byteArray,
 * 最后調(diào)用該函數(shù)的構(gòu)造方法
 */
fun <P1, P2, R> Function2<P1, P2, R>.partial2(p2: P2) = fun(p1: P1) = this(p1, p2)

//由函數(shù)makeString演變出來的偏函數(shù)(設(shè)置好charset的值為Gbk)
val makeStringFromGbkBytes = makeString.partial2(charset("Gbk"))
運行結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容