gpt4 book ai didi

scala - Scala可传递隐式转换

转载 作者:行者123 更新时间:2023-12-04 13:24:18 28 4
gpt4 key购买 nike

  • 我有3个Scala类(A,B,C)。
  • 我从A-> B有一个隐式转换,从B-> C有一个隐式转换。

  • 在代码的某个时刻,我想在A上调用C方法。这可能吗?
    我提出的一个解决方法是从A-> C进行转换,但这似乎有些多余。

    笔记:
  • 当我在A上调用B方法时,它可以工作。
  • 当我在B上调用C方法时,它可以工作。
  • 当我在A上调用C方法时,它说它没有在A主体中找到该方法。

    谢谢 ...

  • 最佳答案

    看起来确实有些多余,但是A -> C转换正是您应该提供的。原因是,如果隐式很少,传递链也很少,并且可能就是您想要的。但是,如果隐式操作很普遍,那么您将有可能将任何东西变成任何东西(或者,如果您添加了方便的隐式操作,突然之间,各种行为都会发生变化,因为您为隐式转换打开了不同的途径)。

    但是,如果您指定要完成,则可以让Scala链为您进行隐式转换。关键是将泛型与<%一起使用,这意味着“可以转换为”。这是一个例子:

    class Foo(i: Int) { def foo = i }
    class Bar(s: String) { def bar = s }
    class Okay(b: Boolean) { def okay = b }
    implicit def to_bar_through_foo[T <% Foo](t: T) = new Bar((t: Foo).foo.toString)
    implicit def to_okay_through_bar[U <% Bar](u: U) = new Okay((u: Bar).bar.length < 4)

    scala> (new Foo(5)).okay
    res0: Boolean = true

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

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