[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