Not sure if this requires a proposal. The code change is pretty trivial: https://github.com/apple/swift/pull/7154 <https://github.com/apple/swift/pull/7154> .
> On Jan 30, 2017, at 3:25 PM, Slava Pestov <spes...@apple.com> wrote: > >> >> On Jan 30, 2017, at 2:58 PM, Daniel Duan via swift-evolution >> <swift-evolution@swift.org> wrote: >> >> Hi all, >> >> Right now, expressions that evaluates to Optional<()>, >> Optional<Optional<()>>… gets special treatment when it’s unused. For example: >> >> func f(s: String) {} >> let s: String = “” >> s.map(f) // no warning here, even tho the resulting type is `Optional<()>` >> and unused. >> >> func g() throws {} >> try? g() // no warnings here neither. >> >> This is convenient, but encourages composing map/filter/reduce, etc with >> side-effect-ful functions, which we have found a few cases of in our >> production code recently. Granted, these cases could’ve been caught with >> more careful code reviews. But we wouldn’t have missed them if this >> “feature” didn’t exist. >> >> I think we should remove the special treatment so that code in the example >> above would generate a warning about `()?` being unused. Users can silence >> it manually by assigning the result to `_`. >> >> OTOH, this would undermine the convenience of `try?` when the throwing >> function don’t return anything. > > IMHO, using ‘try?’ to ignore an error result, instead of just turning it into > an optional, is an anti-pattern, and forcing users to write ‘_ = try? foo()’ > might not be so bad… > >> >> What do y’all think? >> >> Daniel Duan >> _______________________________________________ >> swift-evolution mailing list >> swift-evolution@swift.org <mailto:swift-evolution@swift.org> >> https://lists.swift.org/mailman/listinfo/swift-evolution >> <https://lists.swift.org/mailman/listinfo/swift-evolution>
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution