Scala and implicit class instantiation -


i have following 2 scala files:

object implicitshome {   implicit class stringwrapper(val str: string) extends implicitshome serializable }   trait implicitshome {   def str: string    def embelishstring: string = {     str.concat("fancy")   } } 

and:

import implicitshome._  class user {    def buildsuperstring(str: string): string =   {     str.embelishstring   } }  object user {   def main(args: array[string]): unit = {      val usr = new user()      val fancy = usr.buildsuperstring("hi")      println(fancy)   } 

}

what wondering that, if have call embelishstring function more once, creating multiple instances of implicit stringwrapper class?

i'm concerned because when implicit used, passes string (str) in - 'state' have careful sharing across different invocations of embelishstring function?

every time call embelishstring - new instance of stringwrapper created. it's pretty cheap if don't have heavy constructor/state implicit class, don't (empty constructor , pointer string-object in case). there no reason concern. more - string immutable (so stringwrapper) - means shouldn't worry shared state anyway.

example:

 scala> implicit class aaa(a: string) {println(a); def aa = 5} //added println constructor  defined class aaa    scala> "aaa".aa; "aaa".aa; "bbb".aa  aaa //first instantiation (for "aaa".aa)  aaa //first instantiation (for "aaa".aa)  bbb //third instantiation (for "bbb".aa)  res4: int = 5 

Comments

Popular posts from this blog

matlab - "Contour not rendered for non-finite ZData" -

delphi - Indy UDP Read Contents of Adata -

javascript - Any ideas when Firefox is likely to implement lengthAdjust and textLength? -