如果我使用F#解释,我可以定义一个简单的函数是这样的:在类型信息斯卡拉REPL
> // 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:[email protected]>
显然,这告诉我,功能multipleOf
是int->int->bool
类型。当我在F#解释器中工作时,我发现这非常有用,它可以作为一个工具来缓存我的内存。
但是,我似乎无法在Scala的REPL中找到类似的功能。我可以定义在Scala中的等价功能容易够当然:
def multipleOf(x: Int, y: Int) = x % y == 0
但是,如果我在我的斯卡拉REPL会话十分钟,不记得函数的类型,输入multipleOf
没有给出关于信息类型(实际上,它给出了一个错误)。同样,:type multipleOf
告诉我没有用。
您需要知道的实际情况是'def'定义_methods_,而不是函数。方法是平凡的(通常是自动的)转换为等价的函数,但是在任何情况下,它都是通过“部分应用”的过程来完成的,这是您在编写'myMethodName _'时所要求的。这是否“不是最优”还是没有争议。但'def'定义了在JVM中直接实现的实体(方法)。作为一流实体的功能,唉,需要更加详尽的实施。 – 2013-03-23 05:33:05