Kotlin で Loan パターン (別解)

最近 Kotlin ばっかりやってます。

さて、Qiita に同じ内容の記事が出てました。

Kotlin - Kotolin で Loan パターン - Qiita http://qiita.com/deadbeef/items/862b908ac54fdd58c3df

やり始めた時に自分も作ってたので載せておこうと思います。 合わせて、疑問点も書いておきます。

package sandbox.loanpattern

fun <T : Closeable, R> using(resource: T, f: (T) -> R): R {
    try {
        return f(resource)
    } finally {
        resource.close()
    }
}

使い方

using (ByteArrayOutputStream()) { outStream ->
    outStream.write(...)
}

ほぼ Scala と同じにかけます。

疑問

using 関数の定義を見てみると、リソースと、リソースを利用する関数の2引数を取るものとなっています。 しかし、使い方を見てみると using 関数に渡す引数 f はカッコの外に書いています。

これって言語的にはどういう機能で、リファレンスに記載のあるものでしょうか?(見つけられなかった)