键入斯卡拉REPL信息(Type information in the Scala REPL)

2019-08-17 22:35发布

如果我使用的是F#解释,我可以这样定义一个简单的函数:

> // Function to check if x is an integer multiple of y
> let multipleOf x y = (x % y = 0);;

val multipleOf : x:int -> y:int -> bool

如果我知道在F#解释器会话的功能存在,但我不能确定其精确的类型,我可以要求解释只需键入该函数的名称给我公司类型:

> // I can't remember the type of the function multipleOf!
> multipleOf;;

val it : (int -> int -> bool) = <fun:it@12-1>

显然,这告诉我,功能multipleOf的类型为int->int->bool 。 我觉得这是令人难以置信的是在F#解释工作时慢跑我的记忆的工具是有用的。

不过,我似乎无法找到Scala的REPL类似的功能。 我可以定义在Scala中的等价功能容易够当然:

def multipleOf(x: Int, y: Int) = x % y == 0

但是,如果我对我十分钟我斯卡拉REPL会话,不记得函数的类型,输入multipleOf没有给出关于类型的信息(事实上,它给出了一个错误)。 同样, :type multipleOf告诉我没有什么用处。

Answer 1:

scala> val f = (i: Int, j: Int) => i % j == 0
f: (Int, Int) => Boolean = <function2>

scala> f
res2: (Int, Int) => Boolean = <function2>

scala> def multipleOf(x: Int, y: Int) = x % y == 0
multipleOf: (x: Int, y: Int)Boolean

scala> :type multipleOf(_, _)
(Int, Int) => Boolean


Answer 2:

呸! 这是你想说的问题提交给StackOverflow上解决问题发生时,你只是那些场合之一。 希望有人会发现它有用的,如果我在这里回答它自己。

事实证明,斯卡拉会,只要你告诉它来评估功能为部分评估功能打球上提供的功能类型的信息! 换句话说,下面的伎俩:

scala> multipleOf _
res0: (Int, Int) => Boolean = <function2>

换句话说,在REPL为您提供有关只有当你重新评估功能作为自身的一个部分进行评估版本的功能类型的信息。 这似乎不是最佳显著少。 ;-)

也许有人可以在为什么它是明智的斯卡拉接近事情这样的意见提?



文章来源: Type information in the Scala REPL
标签: scala f#