Write a function add , which takes two integer variables x and y and returns their sum as output in which y is an implicit parameter , and also declares the implicit parameter in the main function as 7 . Then, write a function greet which takes two strings s1 and s2 , where s1 is an implicit parameter with value as Name . On taking the string input from the command line, the program must print s1 : s2
object ImplicitParams2 extends App {
val input1 : String = args(0)
val input2 : Int = args(1).toInt
def add(x: Int = input2)(implicit y: Int =7) = x +y
def greet(implicit s1: string = “name”)(s2: string = input1) = s1 + “:” s2
println(greet(input1))
println(add(input2))
}
While executing it with input as JOHN 5, expected result is Name : John 12 but I am getting JohnJohn 12. Not sure what is wrong, can you please help to check the code and suggest the correction
If you take a closer look to your code, you will see that the problem is trivial.
// The implicit parameter is the first.
def greet(implicit s1: string = “name”)(s2: string = input1) = s1 + “:” s2
// Here you are overriding the implicit parameter with an explicit parameter.
println(greet(input1))
// Thus:
greet(input1)(s2: string = input1) = input + “:” input
You can fix it by doing this:
// Do not pass anything in the first parameter group so it uses the implicit value.
println(greet()(input1))
However, this feels weird and it is more common for implicits to be the last parameter group, especially to do not use an empty parameter list.
Also, this:
“And also declares the implicit parameter in the main function as 7”
Which makes me feel like a better version of the code would be:
object ImplicitParams2 extends App {
implicit val num: Int = 7
val input1: String = args(0)
val input2: Int = args(1).toInt
def add(x: Int)(implicit y: Int): Int = x +y
def greet(s2: String)(implicit s1: String = “name”): String = s"${s1} : ${s2}"
println(greet(input1))
println(add(input2))
}
object ImplicitParams2 extends App {
val input1 : String = args(0)
val input2 : Int = args(1).toInt
//write your code here
println(greet(input1))
println(add(input2))
}