Function 从Scala中的其他类导入函数

Function 从Scala中的其他类导入函数,function,class,scala,import,Function,Class,Scala,Import,比如说我有 class foo{ def bar = 7 } class qaz{ //Here I want to have something like: val foobar = bar //What I don't want to have is val foobar = (new foo).bar } 如何实现这一点?您可以使用foo的伴生对象来定义bar 然后,您只需将其导入qaz: // in foo.scala object foo { def bar

比如说我有

class foo{
  def bar = 7
}

class qaz{
  //Here I want to have something like: val foobar = bar
  //What I don't want to have is val foobar = (new foo).bar   
}

如何实现这一点?

您可以使用
foo
的伴生对象来定义
bar

然后,您只需将其导入
qaz

// in foo.scala
object foo {
  def bar = 7
}
class foo {
  // whatever for foo class
}

// in qaz.scala
import mypackage.foo.bar
class qaz {
  val foobar = bar     // it works!
}

有两种方法可以实现这一点:

  • 使用伴星

  • 第二种方法,即要求包含伴生对象的方法,已由Jean实现:

    class foo {
    // whatever for foo class
    }
    
    //Companion Object
    object foo {
        def bar = 7
    }
    
    class qaz {
      val foobar = bar 
    }
    
    通过创建一个case类而不是普通类,可以为您创建大量样板代码,其中之一是生成apply方法,因此您不需要使用new关键字来创建该类的新实例

    case class foo{
      def bar = 7
    }
    
    class qaz{
       val foobar = bar  
    }
    
    这两种方法都是语法上的甜点,但在后面做同样的事情,也就是说,在伴生对象中使用apply函数。
    请尝试获取更多信息。

    要使此功能发挥作用,foo需要成为foo.scala的伴生对象?我还可以有一个伴随类吗?具体指的是哪个部分?
    case class foo{…}
    (在第二种情况下,除非使用非常旧的Scala版本)和
    val foobar=bar
    (在这两种情况下)。