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.
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution