如何使用自定义impicit来修饰Scala Int类以将其转换为二进制字符串

如何使用自定义impicit来修饰Scala Int类以将其转换为二进制字符串,scala,int,implicit,Scala,Int,Implicit,我想使用以下方法: def toBinary(i : Int, digits: Int = 8) = String.format("%" + digits + "s", i.toBinaryString).replace(' ', '0') 并将其转换为隐式转换,以“修饰”scala Int类RichInt,从而实现以下功能: 3.toBinary //> res1: String = 00000011 3.toBinary(8) //>

我想使用以下方法:

 def toBinary(i : Int, digits: Int = 8) =
                String.format("%" + digits + "s", i.toBinaryString).replace(' ', '0')
并将其转换为隐式转换,以“修饰”scala Int类RichInt,从而实现以下功能:

3.toBinary     //> res1: String = 00000011
3.toBinary(8)  //> res1: String = 00000011
而不是调用
toBinary(3)

我如何才能做到这一点?

[编辑] 在看了链接后,我得到了以下的工作

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专家,所以可能有更好的方法

印刷品:

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专家,所以可能有更好的方法来实现这一点。

可能的重复项应该能够与默认参数
3.toBinary()一起使用。
。如果要跳过括号,则必须添加另一个方法
def toBinary=toBinary(8)
,并从第一个方法中删除默认参数。可能的重复项应能够与默认参数
3.toBinary()一起使用。如果要跳过括号,则必须添加另一个方法
def toBinary=toBinary(8)
,并从第一个方法中删除默认参数。我制定了相同的解决方案,请查看我在编辑器上的评论。你一定在我回答后几秒钟编辑了你的帖子:)DRY:
def toBinary=toBinary(8)
是的。这只是一个例子,但我应该做得对:)我想出了同样的解决方案检查我的评论。你一定在我回答后几秒钟编辑了你的帖子:)DRY:
def toBinary=toBinary(8)
是的。这只是一个例子,但我应该做对:)