如何装饰斯卡拉int类具有自定义impicit转换为二进制字符串
问题描述:
我想用下面的方法:如何装饰斯卡拉int类具有自定义impicit转换为二进制字符串
def toBinary(i : Int, digits: Int = 8) =
String.format("%" + digits + "s", i.toBinaryString).replace(' ', '0')
,并把它变成一个隐式转换,以“装饰”阶诠释类,RichInt所以要实现以下目标:
3.toBinary //> res1: String = 00000011
3.toBinary(8) //> res1: String = 00000011
而不是呼叫toBinary(3)
我怎样才能做到这一点?
[编辑] 寻找链接sugested我得到了它的工作原理
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:如何创建一个允许我在调用它时使用点符号的函数?](http://*.com/questions/31621321/scala-how-can-i-create- a-function-that-allow-me-to-use-dot-notation-when-calli) – Yogesh
你应该可以使用默认参数'3.toBinary()'。如果你想跳过括号,你必须添加另一个方法'def toBinary = toBinary(8)'并从第一个参数中删除默认参数。 –