Implicit def with VarArgs

前端 未结 1 2042
眼角桃花
眼角桃花 2021-01-25 15:05

I just noticed that implicit def doesn\'t seem to work in var args.

For example, I have a java function that takes java.lang.Byte... as its pa

1条回答
  •  迷失自我
    2021-01-25 15:19

    An implicit conversion with a varargs parameter does not make much sense, since you use a varargs parameter so you don't need to explicitly create a collection when you call the function, but with a implicit conversion function, the function is called for you automatically.

    You can define a implicit conversion from a Seq[Byte] to a Seq[java.lang.Byte] (like in your second example) and still use the varargs notation in test and test2 (like in your first example).

    implicit def convert(bytes: Seq[Byte]): Seq[java.lang.Byte] =
      bytes.map(b => b : java.lang.Byte)
    
    def test(data: Byte*) = test2(data: _*)
    def test2(data: java.lang.Byte*) = data.length
    

    Which can be used as :

    scala> test(1.toByte, 2.toByte)
    res2: Int = 2
    
    scala> test(1.toByte, 2.toByte, 3.toByte)
    res3: Int = 3
    

    0 讨论(0)
提交回复
热议问题