- Swift part9 [無断転載禁止]©2ch.net
881 :デフォルトの名無しさん (ワッチョイ f2c9-3OfB)[sage]:2017/02/15(水) 00:05:03.84 ID:98yhGEhP0 - >>876
ラップされた側でさらにタプルに包んで渡さないといけないのがつらいけどこれどうにかできんかな 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
|
- Swift part9 [無断転載禁止]©2ch.net
883 :デフォルトの名無しさん (ワッチョイ f2c9-3OfB)[sage]:2017/02/15(水) 00:38:51.58 ID:98yhGEhP0 - >>882
なるほど、そうなるのか
|
- Swift part9 [無断転載禁止]©2ch.net
886 :デフォルトの名無しさん (ワッチョイ f2c9-3OfB)[sage]:2017/02/15(水) 03:34:27.80 ID:98yhGEhP0 - いや、そもそもメンバ変数にしたくない理由が分からんけどな
|
- Swift part9 [無断転載禁止]©2ch.net
892 :デフォルトの名無しさん (ワッチョイ f2c9-3OfB)[sage]:2017/02/15(水) 15:54:15.06 ID:98yhGEhP0 - >>889
他のメソッドに触られたくないとなったときに、クラスを分割するんじゃなくてstaticローカル変数でメソッドに閉じ込めたいという状況がわからない オブジェクト指向的にはそのクラスが適切な凝集度に収まってないってことでしょ staticローカル変数とかクロージャで状態を関数に閉じ込めてしまうとテストも難しくなる問題もある
|
- Swift part9 [無断転載禁止]©2ch.net
897 :デフォルトの名無しさん (ワッチョイ f2c9-3OfB)[sage]:2017/02/15(水) 18:38:47.57 ID:98yhGEhP0 - struct S {
func foo() { struct T { static var count = 0 } print(T.count) T.count += 1 } } let s1 = S() s1.foo() s1.foo() s1.foo() let s2 = S() s2.foo() s2.foo() s2.foo() これで"0 1 2 0 1 2"を期待するか"0 1 2 3 4 5"を期待するか 読みやすいと思うか読みにくいと思うか 人によって違うだろうしstaticローカル変数があったとしても混乱の元でしかないようなきがする
|