Avatar
@Kishikawa Katsumi PowerAssert って現状ざっくり PowerAssert.Assertion("foo.bar(baz)") .assert(foo.bar.baz()) .capture(expression: foo.bar(baz), column: 4) .capture(expression: foo, column: 0) .captuer(expression: baz, column: 8) みたいに展開するとおもうんですが、下みたいにしたら、副作用ある式でも対応できて評価が一回で済むかなと思ったのですが、 PowerAssert.Assertion("foo.bar(baz)") { (values: inout [Value]) throws -> Bool in func _capture<T>(_ expr: @autoclosure () throws -> T, column: Int) rethrows -> T { let val = try expr() values.append(Value(value: _toString(val), column: column)) return val } return try _capture(_capture(foo, column: 0).bar(_capture(baz, column: 8)), column: 4) } なにか落とし穴あります? (edited)