Tôi thường xuyên đối sánh các chuỗi với các cụm từ thông dụng. Trong Java:..Kết hợp với cụm từ thông dụng trong Scala
java.util.regex.Pattern.compile ("\ w +") khớp ("this_is") phù hợp với
Ouch. Scala có nhiều lựa chọn thay thế.
"\\w+".r.pattern.matcher("this_is").matches
"this_is".matches("\\w+")
"\\w+".r unapplySeq "this_is" isDefined
val R = "\\w+".r; "this_is" match { case R() => true; case _ => false}
Đầu tiên là giống như nặng cân như mã Java.
Vấn đề với điều thứ hai là bạn không thể cung cấp mẫu được biên dịch ("this_is".matches("\\w+".r")
). (Điều này có vẻ là một anti-pattern vì hầu như mọi khi có một phương thức mà có một regex để biên dịch có một quá tải mà phải mất một regex).
Vấn đề với vấn đề thứ ba là nó lạm dụng unapplySeq
và do đó rất khó hiểu.
Thứ tư là tuyệt vời khi phân tách các phần của cụm từ thông dụng, nhưng quá nặng khi bạn chỉ muốn có kết quả boolean.
Tôi có thiếu cách dễ dàng để kiểm tra các kết quả khớp với cụm từ thông dụng không? Có lý do tại sao String#matches(regex: Regex): Boolean
không được xác định? Thực tế, ở đâu được xác định là String#matches(uncompiled: String): Boolean
?
Cần lưu ý rằng 'Chuỗi # đối sánh (chuỗi: Chuỗi)' không được xác định bởi thông số 2.9 hoặc [StringLike] (http://www.scala-lang.org/api/current/index.html # scala.collection.immutable.StringLike) nhập từ thư viện chuẩn. Đó là, trên thực tế, một tạo phẩm của định nghĩa của [Strings in Java] (http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#matches (java.lang. Chuỗi)). – ig0774
Tôi không hiểu ý bạn là quá nặng trong ví dụ đầu tiên? Bạn có nghĩa là mã quá dài, hoặc bạn có nghĩa là nó làm quá nhiều công việc? –
quá nhiều mã, công việc chính xác là những gì tôi muốn – schmmd