如何使用自定义 impicit 装饰 Scala Int class 以转换为二进制字符串

How to decorate the Scala Int class with a custom impicit to convert to binary String

我想使用以下方法:

 def toBinary(i : Int, digits: Int = 8) =
                String.format("%" + digits + "s", i.toBinaryString).replace(' ', '0')

并把它转成隐式转换以便"decorate" scala Int class, RichInt 所以实现如下:

3.toBinary     //> res1: String = 00000011
3.toBinary(8)  //> res1: String = 00000011

而不是调用toBinary(3)

我怎样才能做到这一点?

[编辑] 查看 link 后,我得到了以下有效的方法

implicit class ToBinaryString(i :Int ) {
    def toBinary(digits: Int = 8) =
                String.format("%" + digits + "s", i.toBinaryString).replace(' ', '0')
  }

  3.toBinary(8)                                   //> res2: String = 00000011

虽然没有默认参数但我不能使用它,我希望能够写3.toBinary

object A extends App {
  implicit class RichInt(i: Int) {
    def toBinary(digits: Int = 8): String =
      String.format("%" + digits + "s", i.toBinaryString).replace(' ', '0')
  }

  println(3.toBinary(6))
}

打印:

000011

// 编辑 如果你想调用不带括号的 3.toBinary 我想你必须提供一个没有参数的方法:

object A extends App {
  implicit class RichInt(i: Int) {
    def toBinary(digits: Int): String =
      String.format("%" + digits + "s", i.toBinaryString).replace(' ', '0')

    def toBinary: String = toBinary(8)
  }

  println(3.toBinary)
  println(3.toBinary(6))
}

这个对我有用,但我不是 Scala 专家,所以可能有更好的方法。