Scala:函数声明之间的区别

时间:2016-04-12 07:53:44

标签: scala

我是Scala的新手,下面是三个让我困惑的函数声明:

第一

scala> def sum (a: Int, b: Int) = a + b
sum: (a: Int, b: Int)Int

第二

scala> val sum = (a: Int, b: Int) => a + b
sum: (Int, Int) => Int = <function2>

第三

scala> val anotherSum = sum _
anotherSum: () => (Int, Int) => Int = <function0>

我知道第二个是方法,第三个是函数文字。 我的混淆是第一个声明,是普通函数还是其他一些我不理解的语法?我们将不胜感激。

修改

此外,当我尝试使用第一个声明创建部分应用的函数时,我得到了这个:

Function2

我希望类型为sum public static boolean isTabLayout(Activity activity) { DisplayMetrics metrics = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); int widthPixels = metrics.widthPixels; int heightPixels = metrics.heightPixels; float scaleFactor = metrics.density; float widthDp = widthPixels / scaleFactor; float heightDp = heightPixels / scaleFactor; float smallestWidth = Math.min(widthDp, heightDp); if (smallestWidth > 720) { //Device is a 10" tablet return true; } else if (smallestWidth > 600) { //Device is a 7" tablet return true; } return false; } 的{​​{1}}有2个参数。

1 个答案:

答案 0 :(得分:3)

第一和第二声明宣布不同的东西。不同语法不一样。

scala> def sum = (a: Int, b: Int) => a + b
sum: (Int, Int) => Int

在这里,您定义一个名为sum的方法,该方法不接受任何参数,并返回一个带有两个Int参数并返回Int的函数。

因此,sum方法会返回一个添加两个数字的函数

scala> def sum (a: Int, b: Int) = a + b
sum: (a: Int, b: Int)Int

在这里,您定义一个名为sum的方法,该方法需要两个Int参数,并返回Int

因此,sum方法,可以添加两个数字。

不同之处在于,在第一个版本中,sum不接受任何参数并返回一个函数,而在第二个版本中,sum接受两个参数并返回Int。两件截然不同的事情!

第三个:

scala> val sum = (a: Int, b: Int) => a + b
sum: (Int, Int) => Int = <function2>

在此定义一个名为sum,即Function2,换句话说,这个函数需要两个Int参数并返回{{ 1}}。

因此,Int,类型为sum,并且是指添加两个数字的函数。

额外:

Function2

仔细查看类型。 scala> val anotherSum = sum _ anotherSum: () => (Int, Int) => Int = <function0> 是一个函数,它不带任何返回函数的参数,该函数需要两个返回anotherSum的{​​{1}}个参数。

你在这里没有部分申请。 Scala语言规范的Section 6.7 Method Values解释了这里发生的事情。