[swift-evolution] Very unexpected automatic behaviour between	StringLiteralConvertible and pattern matching!
    David Hart 
    david at hartbit.com
       
    Tue Jan  5 11:28:35 CST 2016
    
    
  
How is it that Swift allows code like this:
struct Sneaky: StringLiteralConvertible {
	init(stringLiteral value: String) {}
	init(extendedGraphemeClusterLiteral value: String) {}
	init(unicodeScalarLiteral value: String) {}
}
func ~=(sneaky: Sneaky, string: String) -> Bool {
	return false
}
enum NormalEnum: String {
	case Super = "super"
	case Mario = "mario"
}
let value = NormalEnum(rawValue: "super”) // return nil!!!!
It hit completely by surprise today because of of a Regex library:
struct Regex: StringLiteralConvertible {
	init(stringLiteral value: String) {}
	init(extendedGraphemeClusterLiteral value: String) {}
	init(unicodeScalarLiteral value: String) {}
	//...
}
func ~=(regex: Regex, string: String) -> Bool {
	return regex.matches(string)
}
If I was not already a Swift enthusiast, this behaviour would have left me completely dumbfounded.
What can we do about it?
David.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160105/4c2473d5/attachment.html>
    
    
More information about the swift-evolution
mailing list