【33】kotlin 偏函数

理解偏函数的概念

  •  传入部分参数 得到新函数

仔细体会与Currying的不同

  • 面向场景不同 Currying一串函数调用 

了解 偏函数的实现方法

 

 

package com.yzdzy.kotlin.chapter5.currying

import com.sun.org.apache.xpath.internal.functions.Function2Args
import java.io.OutputStream
import java.nio.charset.Charset

fun log(tag: String, target: OutputStream, message: Any?) {
    target.write("[$tag] $message\n".toByteArray())

}

//fun log(tag: String) = fun(target: OutputStream) = fun(message: Any?) = target.write("[$tag] $message\n".toByteArray())

fun <P1, P2, P3, R> Function3<P1, P2, P3, R>.curried() =
    fun(p1: P1) = fun(p2: P2) = fun(p3: P3) = this(p1, p2, p3)

fun main(args: Array<String>) {
    log("benny", System.out, "Hello world")

    ::log.curried()("benny")(System.out)("Hello world again")
    //原函数的偏函数
    val consoleLogWithTag = (::log.curried()("benny")(System.out))
    consoleLogWithTag("Hello Agagin1")
    consoleLogWithTag("Hello Agagin2")
    consoleLogWithTag("Hello Agagin3")
    val bytes="我是中国人".toByteArray(charset("GBK"))
    //偏函数
    val StringFromGBK= makeStringFromGbkBytes(bytes)

}

//上面的偏函数都是已经设置了签名的参数 后面再去使用  下面的案列将自定义第二个函数 然后传递前面的函数就行了
val makeString = fun(byteArray: ByteArray, charset: Charset): String {
    return String(byteArray)
}

//
val makeStringFromGbkBytes = makeString.partial2(charset("GBK"))

fun <P1, P2, R> Function2<P1, P2, R>.partial2(p2: P2) = fun(p1: P1) = this(p1, p2)
fun <P1, P2, R> Function2<P1, P2, R>.partial1(p1: P1) = fun(p2: P2) = this(p1, p2)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值