[swift-evolution] [Review] SE-0089: Renaming String.init<T>(_: T)

Kevin Ballard kevin at sb.org
Wed May 25 17:53:34 CDT 2016


On Wed, May 25, 2016, at 02:56 PM, Karl Wagner via swift-evolution wrote:
> What is so bad about the global function idea?
> 
> reflect(_:Any)->String
> 
> It’s invoking the reflection APIs, doing a bunch of things you could do yourself with Mirror, and returning a String.
> 
> I know we don’t have many global functions, but this seems like a reasonable place for one.
> 
> This isn’t Objective-C; we have namespaces. You can still create another function with that same signature, and refer to the global one with Swift.reflect().

The function under debate doesn't use the reflection API unless the type doesn't implement any of the related protocols, so calling it reflect(_:) would be very misleading. That name would be much more appropriate as a replacement for String(reflecting:).

-Kevin

> Karl
> 
> > On 22 May 2016, at 20:19, Dave Abrahams via swift-evolution <swift-evolution at swift.org> wrote:
> > 
> > 
> > on Fri May 20 2016, Kevin Ballard <swift-evolution at swift.org> wrote:
> > 
> >> On Fri, May 20, 2016, at 05:14 PM, Dave Abrahams via swift-evolution wrote:
> >>> 
> >>> on Fri May 20 2016, Kevin Ballard <swift-evolution at swift.org> wrote:
> >>> 
> >>>> On Tue, May 17, 2016, at 08:32 PM, Chris Lattner via swift-evolution wrote:
> >>>>> 	* What is your evaluation of the proposal?
> >> 
> >>>> 
> >>>> I'm a little nervous about this change, because converting things to
> >>>> strings is a fairly basic operation and it should be immediately
> >>>> obvious how to do that. That said, the described issues are pretty
> >>>> bad, and I know I've had to carefully triple-check sometimes to make
> >>>> sure I was calling the right initializer. So I'm +1 on the idea.
> >>>> 
> >>>> That said, I don't like the name String(printing:). As others have
> >>>> pointed out, it sounds like this is related to print(), but this
> >>>> initializer does not actually print anything, it just converts any
> >>>> value into a string. I also don't like String(describing:) because
> >>>> it's too long. This initializer should be easier to call than
> >>>> String(reflecting:). Also, in my experience this initializer is
> >>>> particularly useful with code of the form `someOpt.map(String.init)`,
> >>>> and saying `someOpt.map(String.init(describing:))` is annoyingly long.
> >>>> 
> >>>> Given this, I'd like to suggest the simpler `String(from:)`. It's
> >>>> short and generic, and it makes sense as it creates a String from any
> >>>> value.
> >>> 
> >>> Not too bad.  I could live with it.
> >> 
> >> 😀
> >> 
> >>>> I'm also not a fan of Dave's suggestion of removing this initializer
> >>>> entirely in favor of "\(foo)".  This feels weird, and it also can't be
> >>>> turned into a first-class function value.
> >>> 
> >>>  { "\($0)" }
> >>> 
> >>> ?
> >> 
> >> Good point. I think what I intended to express was you cannot refer to
> >> this operation by name anymore. Maybe not a big deal, but it feels
> >> weird.
> > 
> > Makes sense.
> > 
> > -- 
> > -Dave
> > 
> > _______________________________________________
> > swift-evolution mailing list
> > swift-evolution at swift.org
> > https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution


More information about the swift-evolution mailing list