【问题标题】:apply() returning the same objectapply() 返回相同的对象
【发布时间】:2017-02-06 04:22:36
【问题描述】:

我试图了解 Future 是如何工作的,我遇到了它的 apply()。 api 说这个关于apply()

开始一个异步计算并返回一个Future对象 该计算的结果

我想通过创建一个简单的对象来更好地理解它,它的应用将返回具有修改字段的相同对象。例如,考虑下面的代码:

object Rough extends App {
  trait Sample

  object Sample {
    var x: Int = 0
    def apply[T](body: => T): String= {
      "Hello " + body
    }
  }

  val s: String = Sample.apply("World")

  print(s)
}

现在申请返回一个String。我希望它返回Sample[Int]。更具体地说,我希望 apply() 返回 Sample[Int],其中 Int 值将是传递给 apply() 的字符串字符的长度。我该怎么做?

【问题讨论】:

    标签: scala


    【解决方案1】:

    您似乎对一些不相关的 Scala 主题感到困惑。

    首先,apply() 只是一种与其他方法一样的方法。唯一的特殊之处在于在调用时可以省略名称。所以Sample() 只是Sample.apply() 的方便简写。

    现在,如果您想要一个返回它所附加的单例对象的方法,只需让它返回 this

    object Sample {   // create a singleton object
      var x: Int = 0
      def apply(s: String): Sample.type = {
        x = s.length  // save some data
        this          // return a reference to this object
      }
    }
    
    val samp = Sample("Hi there")  // invoke the 'apply()' method
    samp.x            // get the saved data --> res0: Int = 8
    

    【讨论】:

    • 还有一个是“返回一个Future对象”(或“一个Sample对象”)并不意味着它返回“同一个对象”,即object Future定义的对象,而是一个扩展trait Future[A]的对象。
    猜你喜欢
    • 1970-01-01
    • 2017-07-17
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 2014-02-05
    相关资源
    最近更新 更多