相关疑难解决方法(0)

隐式转换的结果类型必须比AnyRef更具体

def h(a: AnyRef*) = a.mkString(",")
h: (a: AnyRef*)String
Run Code Online (Sandbox Code Playgroud)

所以

h("1","2")
res: String = 1,2
Run Code Online (Sandbox Code Playgroud)

然而, h(1,2)

error: the result type of an implicit conversion must be more specific than AnyRef
              h(1,2)
                ^
error: the result type of an implicit conversion must be more specific than AnyRef
              h(1,2)
                  ^
Run Code Online (Sandbox Code Playgroud)

这至少在Scala 2.11.1和2.11.1中.询问解决方法.

scala

22
推荐指数
4
解决办法
1万
查看次数

将Scala varargs转换为Java Object ... varargs

我有一个Java类,它记录的东西有这样的方法:

void info(Object message, Object... params);
Run Code Online (Sandbox Code Playgroud)

在Scala中,我创建了一个围绕这样调用的包装器,如下所示:

def info(msg: => String, params: Any*) {
  log.info(msg, params);
}
Run Code Online (Sandbox Code Playgroud)

我打电话的时候:

val host = "127.0.0.1"
val port = "1234"
info("Start on {0}:{1}", host, port)
Run Code Online (Sandbox Code Playgroud)

我明白了:

"Started on WrappedArray(127.0.0.1, 1234):{1}"
Run Code Online (Sandbox Code Playgroud)

现在,有没有人现在如何将params转换为可以正确使用的Object []?

我试着这样做:

def info(msg: => String, params: Any*)
  log.info(msg, params.toList.toArray);
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用:

"Started on [Ljava.lang.Object;@14a18d:{1}"
Run Code Online (Sandbox Code Playgroud)

你做的时候会发生类似的事情:

params.asInstanceOf[WrappedArray[Object]].array
Run Code Online (Sandbox Code Playgroud)

scala scala-2.8

13
推荐指数
2
解决办法
2980
查看次数

重载方法调用有替代方法:String.format

我在下面编写了下面的Scala代码来处理我传入的String,格式化String,将其附加到a StringBuilder并将String带有转义的unicode 的格式化返回给我的调用者以进行其他处理.

Scala编译器在存在String.format以下错误的调用行时抱怨以下内容:

带备选方法的重载方法值格式:(x$1; java.util.Locale; x$2: String, X$3: Object*) (x$1:String,x$2: Object*)无法应用字符串(*String, Int)

class TestClass {    
    private def escapeUnicodeStuff(input: String): String = {
            //type StringBuilder = scala.collection.mutable.StringBuilder
            val sb = new StringBuilder()
            val cPtArray = toCodePointArray(input) //this method call returns an Array[Int]
            val len = cPtArray.length
            for (i <- 0 until len) {
              if (cPtArray(i) > 65535) {
                val hi = (cPtArray(i) - 0x10000) / 0x400 + 0xD800
                val lo = (cPtArray(i) …
Run Code Online (Sandbox Code Playgroud)

string unicode stringbuilder scala

6
推荐指数
1
解决办法
2630
查看次数

为什么AnyVal不能用于isInstanceOf检查?

我在想,为什么AnyVal不能用于isInstanceOf检查?这种行为背后的原因是什么?

scala> val c = 't'
c: Char = t

scala> c.isInstanceOf[AnyVal]
<console>:12: error: type AnyVal cannot be used in a type pattern or isInstanceO
f test
             c.isInstanceOf[AnyVal]
Run Code Online (Sandbox Code Playgroud)

scala

5
推荐指数
1
解决办法
725
查看次数

Scala中匹配String和Int之间的区别

考虑以下两个代码片段:

scala> def f1(x:Any) = x match { case i:String => i; case _ => null }
f1: (x: Any)String

scala> def f2(x:Any) = x match { case i:Int => i; case _ => null }
f2: (x: Any)Any
Run Code Online (Sandbox Code Playgroud)

为什么是f2回归类型Any,f1而是String?我期待要么返回Any要么f2返回Int.

scala scala-2.8

2
推荐指数
1
解决办法
459
查看次数

scala:Any 和 AnyRef 有什么区别?

只是对类型AnyAnyRefScala 中的区别感到好奇。为什么 int 属于AnyVal而 string 属于AnyRef

例如:

val a: AnyVal = 3
val b: AnyRef = "1"
Run Code Online (Sandbox Code Playgroud)

scala

2
推荐指数
1
解决办法
4691
查看次数

Scala:直接或通过包装器访问java原语吗?

我知道你可以直接从Scala访问java原语

val javaDouble = new java.lang.Double(1.0)
Run Code Online (Sandbox Code Playgroud)

这是否意味着我们通过包装器直接访问基元?语法new java.lang.Double(1.0)看起来像创建一个新对象,因此有一个包装器可以让我们访问java原语.如果这是真的,我想知道它需要多少额外的内存占用和计算.

java scala

1
推荐指数
1
解决办法
805
查看次数

标签 统计

scala ×7

scala-2.8 ×2

java ×1

string ×1

stringbuilder ×1

unicode ×1