如何在scala中返回调用对象

时间:2017-07-24 20:12:18

标签: scala

下面的对象必须使用清理调用并稍后启动。如何将调用对象返回到下一个方法,以确保所有变量集仍然可用,而无需创建新的对象实例。

class a =
{
    val z ="Hello"

    def remove(): com.hello.a =
    {
        return ? /* how to return the same object type A , so that start() definition gets the correct object**/
    }

    def start () : unit = 
    {      
        /**buch of tasks **/
    }
}

a.remove().start()

1 个答案:

答案 0 :(得分:1)

scala this中的

是对当前实例的引用(如java中所示)。

例如,

class SomeClass {

  def remove(): SomeClass = {
    println("remove something")
    this
  }

  def start(): Unit = {
    println("start something")
  }
}

new SomeClass().remove().start()

输出

remove something
start something

.remove().start()在这里看起来有些奇怪,您可能希望将remove定义为私有方法,只需调用start,它会在启动之前删除。

例如

class SomeClass {
  val zero = "0"

  private def remove() = {
    println("remove something")
  }

  def start(): Unit = {
    remove()
    println("start something")
  }
}

new SomeClass().start()

或者,您可能想要定义将调用do删除内容并为您提供实例的伴随对象,

   class SomeClass {
      val zero = "0"

      private def remove() = {
        println("remove something")
      }

      def start(): Unit = {
        println("start something")
      }
    }

    object SomeClass {

      def apply(): SomeClass = {
        val myclass = new SomeClass()
        myclass.remove()
        myclass
      }

    }

    SomeClass().start()