1

In Scala programming use an anonymous function is a usual thing . when i decide to creat a vector as out put of an anonymous function from two different ways way one : var hold1=(1 to 5).map(_*2) way two: var hold2=(1 to 5).map(2*) I want to know what is the difference between those two declaration ?

2 Answers 2

4

In short - they are exactly the same. First approach:

var hold1 = (1 to 5).map(_*2)

Let's rewrite this another way to demonstrate what's really happening under the hood (no syntactic sugar)

var hold1 = (1 to 5).map(number => number.*(2))

Second approach:

var hold2 = (1 to 5).map(2*)

Rewrite again:

var hold2 = (1 to 5).map(number => 2.*(number))

All that is happening is in first way are invoking the * def on the number 2 and in the second way we are invoking the * def on the number.

Sign up to request clarification or add additional context in comments.

3 Comments

it might be interesting to look at the generated code, however. _ * 2 almost certainly creates an anonymous lambda, but 2 * might not.
They are only exactly the same if you assume that Int.* is symmetric! That is not true in the general case.
Why does the second version which calls the .* method not require the _? Should it not be (1 to 5).map(2 * _) ?
0

Both are exactly same. You can use underscore character in many different ways. Refer this link for more details.

What are all the uses of an underscore in Scala?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.