【问题标题】:Scala REPL: How to find function type?Scala REPL:如何查找函数类型?
【发布时间】:2013-03-14 17:58:40
【问题描述】:

在 Scala REPL 中可以找到值类型:

    scala> val x = 1
    x: Int = 1

    scala> :t x
    Int

然而 Scala REPL 不显示函数的类型信息:

    scala> def inc(x:Int) = x + 1
    inc: (x: Int)Int

scala> :t inc
<console>:9: error: missing arguments for method inc;
follow this method with `_' if you want to treat it as a partially applied function
       inc
       ^
<console>:9: error: missing arguments for method inc;
follow this method with `_' if you want to treat it as a partially applied function
          inc
          ^

如何在 Scala REPL 中查找函数类型?

【问题讨论】:

  • 按照错误信息中所说的去做怎么样?
  • this的可能重复

标签: function scala types read-eval-print-loop


【解决方案1】:

你可以写下方法的名字,然后按tab键。

Stream.fill<tab>

给你:

def fill[A](n1: Int,n2: Int,n3: Int)(elem: => A): 
scala.collection.immutable.Stream[scala.collection.immutable.Stream[scala.collection.immutable.Stream[A]]]
def fill[A](n1: Int,n2: Int,n3: Int,n4: Int)(elem: => A): scala.collection.immutable.Stream[scala.collection.immutable.Stream[scala.collection.immutable.Stream[scala.collection.immutable.Stream[A]]]]
def fill[A](n1: Int,n2: Int)(elem: => A): scala.collection.immutable.Stream[scala.collection.immutable.Stream[A]]
def fill[A](n1: Int,n2: Int,n3: Int,n4: Int,n5: Int)(elem: => A): scala.collection.immutable.Stream[scala.collection.immutable.Stream[scala.collection.immutable.Stream[scala.collection.immutable.Stream[scala.collection.immutable.Stream[A]]]]]
override def fill[A](n: Int)(elem: => A): scala.collection.immutable.Stream[A]

【讨论】:

    【解决方案2】:

    遵循建议会很有效:

    :t inc _
    Int => Int
    

    为了更详细一点,这是必要的原因是 Scala 对“方法”(在 JVM 中具有本机支持但不是一流的)和“函数”(被视为实例)进行了区分FunctionX 并被 JVM 视为对象。使用尾随下划线将前者转换为后者。

    【讨论】:

    • 谢谢!那为什么我不能做::t scala.collection.immutable.List.type.foldLeft _,我也不能做:t java.Lang.String.split _
    • 这些都是类方法,您只能部分应用(即转换为Function 对象)实例方法。例如,创建List 的特定实例,您将能够检查其foldLeft 方法的类型。
    猜你喜欢
    • 2016-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    相关资源
    最近更新 更多