相关疑难解决方法(0)

Scala currying与部分应用的函数

我认识到,有在这里大约几个问题是什么钻营和部分应用功能,但我问他们是如何不同.举个简单的例子,这是一个用于查找偶数的curry函数:

def filter(xs: List[Int], p: Int => Boolean): List[Int] =
   if (xs.isEmpty) xs
   else if (p(xs.head)) xs.head :: filter(xs.tail, p)
   else filter(xs.tail, p)

def modN(n: Int)(x: Int) = ((x % n) == 0)
Run Code Online (Sandbox Code Playgroud)

所以你可以编写以下内容来使用它:

val nums = List(1,2,3,4,5,6,7,8)
println(filter(nums, modN(2))
Run Code Online (Sandbox Code Playgroud)

返回:List(2,4,6,8).但我发现我可以用这种方式做同样的事情:

def modN(n: Int, x: Int) = ((x % n) == 0)

val p = modN(2, _: Int)
println(filter(nums, p))
Run Code Online (Sandbox Code Playgroud)

还返回:List(2,4,6,8).

所以我的问题是,两者之间的主要区别是什么,何时使用一个而不是另一个?这是一个过于简单的例子来说明为什么一个人会被用在另一个上面?

functional-programming scala currying

81
推荐指数
2
解决办法
3万
查看次数

在Scala中使用部分函数 - 它是如何工作的?

我是Scala的新手,我正在使用2.9.1,而我正试图了解如何使用部分功能.我对curried函数有一个基本的了解,我知道部分函数有点像curried函数,它们只有2nary或者其他类似函数.你可以告诉我,我有点绿.

看起来在某些情况下,比如XML过滤,能够部分功能是非常有利的,所以我希望能更好地理解如何使用它们.

我有一个使用RewriteRule结构的函数,但我需要它使用两个参数,而RewriteRule结构只需要一个,或一个部分函数.我认为这是我认为它有用的案例之一.

任何建议,链接,智慧的话等欢迎!

到目前为止,答案非常好,并且澄清了我的一些基本误解.我认为他们也解释了我在哪里挣扎 - 我想也许发布一个更具体的新问题会有所帮助,所以我也会这样做.

functional-programming scala jvm-languages

47
推荐指数
2
解决办法
2万
查看次数