Swift part9 [無断転載禁止]©5ch.io
■ このスレッドは過去ログ倉庫に格納されています
0881デフォルトの名無しさん (ワッチョイ f2c9-3OfB)
2017/02/15(水) 00:05:03.84ID:98yhGEhP0ラップされた側でさらにタプルに包んで渡さないといけないのがつらいけどこれどうにかできんかな
func wrap<T, V>(_ fn: @escaping (T) -> V) -> (T) -> V {
print("¥(T.self) -> ¥(V.self)")
var counter = 0
return { (args: T) -> V in
let mirror = Mirror(reflecting: args)
let inputs = mirror.children.count == 0 ? [args] : mirror.children.map { $0.value }
let result = fn(args)
print("¥(counter): ¥(inputs) -> ¥(result)")
counter += 1
return result
}
}
func f1(a: Int, b: String) -> String { return repeatElement(b, count: a).joined() }
let f2 = wrap(f1)
f2((5, "z"))
f2((3, "abc"))
// (Int, String) -> String
// 0: [5, "z"] -> zzzzz
// 1: [3, "abc"] -> abcabcabc
■ このスレッドは過去ログ倉庫に格納されています