是否可以在方法调用链中引用链接对象?

时间:2017-02-04 23:11:38

标签: scala chaining method-chaining

我有一个构建器调用链,其中一个调用必须附加到默认值,例如

var x = new X()
  .setA(1)
  .setB(2)
x = x.setList(x.getList :+ "itemtoappend")

有没有办法内联setList调用? (X是第三方图书馆)

我希望有一个关键字,比如“链”,就像这样使用:

val x = new X()
  .setA(1)
  .setB(2)
  .setList(chain.getList :+ "itemtoappend")

假设我没有能力在X上编写appendToList方法,并且不想编写并隐式转换为具有appendToList的MyX类。

2 个答案:

答案 0 :(得分:1)

您似乎想要在构建对象的同时访问该对象两次。

class X {
  def setA(a: Int): X = this
  def setB(b: Int): X = this
  def setList(ss: Seq[String]): X = this
  def getList = Seq("head")
}

val x: X = Option( new X().setA(1).setB(2)
                 ).map(z => z.setList(z.getList :+ "itemtoappend")).get

答案 1 :(得分:0)

我认为标准方法是编写一个同时进行设置和获取的方法,并传递一个函数。您将其称为

val x = new X()
  .setA(1)
  .setB(2)
  .list(_ :+ "itemtoappend")