What is the difference between ::: and :::.() in scala -


in scala list class shown that:

list(1, 2) ::: list(3, 4) = list(3, 4).:::(list(1, 2)) = list(1, 2, 3, 4). shouldn't:

list(1,2) ::: list(3,4) = list(1,2).:::(list(3,4)) = list(3,4,1,2)

( method ::: prefixes list)

from docs:

def :::(prefix: list[a]): list[a] 

[use case] adds elements of given list in front of list.

example:

list(1, 2) ::: list(3, 4) = list(3, 4).:::(list(1, 2)) = list(1, 2, 3, 4) 

in scala, operators end in : right associative , invoking object appears on right side of operator. because right associative, prefix method called on object "to right", list(3, 4).

then name says, prefix list(3, 4) list(1, 2), , that's why list(1, 2, 3 ,4). not intuitive thing in world it's this:

a ::: b // ending in :, flip argument order, call method on b. b .:: // :: = prefix b result = a(concatenated) b 

now let's @ right hand side:

list(3, 4).:::(list(1, 2)) 

the . dot performing inversion of ::: prefixed invocation, invert 2 list objects before performing ::: prefix operation.

list(3, 4).:::(list(1,2)) = list(1, 2) ::: list(3, 4) // above. // , it's same story. 

the . dot way invert associative operators. a ::: b same b .::: a


Comments

Popular posts from this blog

java - Jmockit String final length method mocking Issue -

asp.net - Razor Page Hosted on IIS 6 Fails Every Morning -

c++ - wxwidget compiling on windows command prompt -