किसी को इस स्काला / जावा अंतर को समझाने के लिए अनुरोध करें -
स्कैला पैटर्न मिलान का उपयोग करना
scala> def scalaRegex(count: Int) = {
| val t1 = System.currentTimeMillis
| val r_r = "test".r
| val str = "test"
| for (i <- 0 to count) {
| str match {
| case r_r =>
| }
| }
| val t2 = System.currentTimeMillis
| val diff = t2 - t1
| println(t2); println(t1); println(diff)
| }
scalaRegex: (count: Int)Unit
scala> scalaRegex(1000000000)
1425976261692
1425976261102
590
रेगेक्स से मेल खाने के लिए जावा का सरल तरीका उपयोग करना -
scala> def javaRegex(count:Int) = {
| val t1 = System.currentTimeMillis
| val r_r = "test".r.pattern
| val str = "test"
| for (i <- 0 to count) {
| r_r.matcher(str).matches()
| }
| val t2 = System.currentTimeMillis
| val diff = t2 - t1
| println(t2); println(t1); println(diff)
| }
javaRegex: (count: Int)Unit
scala> javaRegex(1000000000)
1425976399868
1425976335679
64189
100 गुणा अंतर है - क्या हो रहा है?
उत्तर:
जवाब के लिए 2 № 1खैर ... आप शब्द के साथ भ्रमित हो रहे हैं pattern matching
स्कैला में
यह नहीं regex pattern matching
.
scala> val regex = "test".r
regex: scala.util.matching.Regex = test
scala> val str1 = "test"
str1: String = test
scala> val str2 = "qwerty"
str2: String = qwerty
scala> str1 match {
| case regex => println( "yes" )
| }
yes
scala> str2 match {
| case regex => println( "yes" )
| }
yes
यहां कोई रेगेक्स मिलान नहीं हो रहा है।
यह भी साथ काम करेगा Int
.
scala> val i = 5
i: Int = 5
scala> str2 match {
| case i => println( "yes" )
| }
yes
स्केल में, यदि आप pattern match
एक से अधिक variable case
... यह हमेशा मेल खाता है ... यह एक जैसा व्यवहार करता है if( true )
अन्य भाषाओं में।
scala> val i = 5
i: Int = 5
// here str2 can be any valid scala variable... Int, Long, List, String etc...
scala> str2 match {
| case i => println( "I will always get printed, irrespective of str2." )
| }
I will always get printed, irrespective of str2.
तो ... अपने स्कैला उदाहरण में बस इसके साथ लूपिंग count
, एक निष्पादित if( true )
प्रत्येक पाश में और फिर समय प्रिंट करना, जबकि आपके जावा उदाहरण में आप वास्तव में रेगेक्स पैटर्न मिलान कर रहे हैं। इसलिए आप जावा उदाहरण में काफी समय ले रहे हैं।