1

関数から、Int または String または Swift の別の型である可能性がある関数または値を返したいと考えています。これらすべてを表現できる型は何ですか?

次のコードは、autoCurry 関数のこの行が原因でエラーをスローしますreturn self.autoCurry(function, params, numArgs: argsRemaining)

class $ {


    class func curry<P, T>(function: (P...) -> T, _ parameters: (P[])) -> ((P...) -> Any?) {
        return {
            (curryParams: P...) -> Any? in
            var params:P[] = []
            return function(reinterpretCast(parameters + curryParams))
        }
    }

    class func autoCurry<P, T>(function: (P...) -> T, _ parameters: (P[]), numArgs: Int) -> ((P...) -> Any?) {
        let funcParams: P[] = []
        let funcRef = { (curryParams: P...) -> Any? in
            if curryParams.count < numArgs {
                let argsRemaining = numArgs - curryParams.count
                let params = parameters + curryParams
                return self.autoCurry(function, params, numArgs: argsRemaining)
            } else {
                return function(reinterpretCast(curryParams))
            }
        }
        return funcRef
    }
}
4

1 に答える 1

3

関数をカバーする Swift 型はありません。2 つの「ジェネリック」タイプは、関数を明示的に除外します。

“Swift provides two special type aliases for working with non-specific types:

  AnyObject can represent an instance of any class type.
  Any can represent an instance of any type at all, apart from function types.”


Excerpt From: Apple Inc. “The Swift Programming Language.”
  iBooks. https://itun.es/us/jEUH0.l

したがって、関数とその他の型の両方をカバーできる戻り値の型を指定することはできません。

補足: 実際に「カレー」操作を実行しているようには見えませんが、「部分関数アプリケーション」を実行しているようです。カリー化は Swift に組み込まれています。

于 2014-06-22T23:22:47.977 に答える