gpt4 book ai didi

Scala隐式转换问题

转载 作者:行者123 更新时间:2023-12-01 07:22:02 25 4
gpt4 key购买 nike

我正在努力解决 Scala 隐式转换问题。以下代码片段说明了我的问题:

import org.junit.{ Test, Before, After };

class ImplicitsTest {

implicit def toStringWrapper(str: String) = new StringWrapper(str);

@Test
def test(){
val res1: Predicate = "str" startsWith "other";
}

}

class StringWrapper(str: String){

def startsWith(other: String): Predicate = null;

}

trait Predicate

如何强制字符串文字“str”通过隐式转换 toStringWrapper 进行转换,以获取 startsWith 返回 Predicate 而不是 Boolean?

代码示例无法编译。我知道 String 已经有一个 startsWith 方法,我只想使用不同的方法,我认为使用隐式转换可能是一种方法。

最佳答案

值得庆幸的是,Scala 不会让您在没有注意到的情况下偷偷带入替换方法——如果您在类上调用一个方法,并且该类具有该方法,那么这就是您获得的方法调用。否则可能会引起各种困惑。

这让您有另外两个选择:
(1)重命名方法
(2) 添加特定的方法来进行转换。

第二种方法的工作原理如下:您定义一个类,该类具有您想要的方法和返回自身的唯一命名的方法,如果您希望能够使用自定义像原始字符串一样的项目(好像它扩展了字符串):

object ImplicitExample {
class CustomString(s: String) {
def original = s
def custom = this
def startsWith(other: String): Int = if (s.startsWith(other)) 1 else 0
}
implicit def string_to_custom(s: String) = new CustomString(s)
implicit def custom_to_string(c: CustomString) = c.original

def test = {
println("This".custom.startsWith("Thi"))
println("This".custom.length())
}
}

scala> ImplicitExample.test
1
4

scala>

关于Scala隐式转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3876043/

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