可以解释下这行代码是什么意思吗?

可以解释下这行代码是什么意思吗?
为什么可以这样写?
为什么要写成这样?

    fun log(tag: String)
        = fun(target: OutputStream)
        = fun(message: Any?)
            = target.write("[$tag] $message\n".toByteArray())
阅读 2.1k
1 个回答

既然你给这个问题打了currying这个标签,我很奇怪你为什么不知道这就是一般柯里化的写法。

log函数接收一个tag参数,然后返回一个接收target参数的匿名函数,这个匿名函数又会返回一个接收message的匿名函数,最后这个函数使用前面接收到的三个参数来完成write操作。

这个函数在调用的时候需要连着调,像这样:

log(aTag)(aTarget)(aMessage);