It's an interesting idea that needs to be written down in a separate proposal and is tangentially related to the problem we are trying to solve here and now. It is trivial to define this operator and was suggested by Charlie as new API to be added to Optional the last time improving Optionals in interpolation segments was discussed. For now we're trying to keep it light and bugfix-esque.
~Robert Widmann 2016/10/04 13:29、Kevin Ballard via swift-evolution <[email protected]> のメッセージ: > On Tue, Oct 4, 2016, at 10:28 AM, Nate Cook wrote: >>> On Oct 3, 2016, at 5:49 PM, Kevin Ballard via swift-evolution >>> <[email protected]> wrote: >>> >>> On Mon, Oct 3, 2016, at 03:18 PM, Jordan Rose wrote: >>>>> >>>>> ... >>>>> >>>> We had this at one point, but we took it out because people would forget >>>> to test the nil case. I think `?? ""` or `?? nil` really is the best >>>> answer here. >>> >>> But you can't write that, unless you're dealing specifically with an >>> Optional<String>. If you try you'll get an error: >>> >>> unnamed.swift:2:19: error: binary operator '??' cannot be applied to >>> operands of type 'Int?' and 'String' >>> print("x: \(x ?? "nil")") >>> ~ ^ ~~~~~ >>> unnamed.swift:2:19: note: overloads for '??' exist with these partially >>> matching parameter lists: (T?, @autoclosure () throws -> T), (T?, >>> @autoclosure () thro >>> ws -> T?) >>> print("x: \(x ?? "nil")") >>> ^ >>> This leads to writing code like "… \(x.map(String.init(describing:)) ?? >>> "nil")" which is pretty gross. >> >> I think that if we're going to add this warning we should make it possible >> to provide a string as an alternative. It seems like it should be possible >> to build a ?? operator with a (T?, String) -> _StringInterpolationSomething >> signature that works only in a string interpolation context. >> >> There are some types that aren't trivially constructible, or don't have >> clear alternatives for the nil case. Other times it might just not make >> sense to build a new instance simply to turn it into a string. If we're >> going to make people provide an alternative for optionals in this otherwise >> simple-to-use construct, let's make it simple to do so. >> >> This is undoubtedly a more complex approach that could be considered >> separately, but I think it would be a valuable part of how developers could >> transition their code. > > I like this idea. This combined with the warning for naively interpolating an > Optional would be a good solution, because now when I see the warning I can > trivially solve it with `?? "nil"`. > > -Kevin Ballard > > _______________________________________________ > swift-evolution mailing list > [email protected] > https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
