gpt4 book ai didi

scala - 如何关闭 Scala 中因方法重载而导致代码无法编译的特定隐式?

转载 作者:行者123 更新时间:2023-12-02 14:00:16 27 4
gpt4 key购买 nike

我正忙着自己回答这个问题:Scala Play 2.4.x handling extended characters through anorm (MySQL) to Java Mail

我遇到了这个可能的解决方案:https://objectpartners.com/2013/04/24/html-encoding-utf-8-characters/

所以我决定用 Scala 重写示例:

  def htmlEncode(input: String) = htmlEncode_sb(input).toString

def htmlEncode_sb(input: String, stringBuilder: StringBuilder = new StringBuilder()) = {
for ((c, i) <- input.zipWithIndex) {
if (CharUtils.isAscii(c)) {
// Encode common HTML equivalent characters
stringBuilder.append(StringEscapeUtils.escapeHtml4(c.toString()))
} else {
// Why isn't this done in escapeHtml4()?
stringBuilder.append(String.format("&#x%x;": String, Character.codePointAt(input, i)))
}
}
stringBuilder
}
}

仅供引用:我倾向于将大多数在字符串上工作的东西重写到包装的 StringBuilder 调用中,以防我已经使用另一个 StringBuilder 构建某些东西,在这种情况下,我可以将该 StringBuilder 作为参数传递 - 如果然后通过调用第一个函数,not 作为普通字符串工作。

您可能会认为这一切都很好,但是 Scala 编译器有这样的说法:

[info] Compiling 1 Scala source to /SomeOne/SomePath/SomeProject/target/scala-2.11/classes...
[error] /SomeOne/SomePath/SomeProject/TKEmailAgent.scala:278: overloaded method value format with alternatives:
[error] (x$1: java.util.Locale,x$2: String,x$3: Object*)String <and>
[error] (x$1: String,x$2: Object*)String
[error] cannot be applied to (String, Int)
[error] stringBuilder.append(String.format("&#x%x;": String, Character.codePointAt(input, i)))
[error] ^
[error] one error found
[error] (compile:compileIncremental) Compilation failed

请注意,我什至尝试“声明”第一个参数需要是字符串:

stringBuilder.append(String.format("&#x%x;": String, Character.codePointAt(input, i)))

然而编译器并没有接受带有 java.util.Locale 的重载方法可以解决问题的提示。

我将代码移动到一个不太困惑的类中,认为这可能是一个导入,但没有那么幸运。

所以问题是如何禁用不是自己选择的隐式?

或者

如何满足编译器了解您真正想要什么的需要?

最佳答案

显然这可以编译:

    stringBuilder.append(String.format("&#x%x;": String, Character.codePointAt(input, i).toString))

但是我相信,如果 toString 首先掌握事物,这可能会首先破坏调用 format 的整个目的。

所以我原来的问题仍然存在......

关于scala - 如何关闭 Scala 中因方法重载而导致代码无法编译的特定隐式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31435272/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com