问题标签 [partialfunction]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
165 浏览

scala - Scala:部分函数错误:如果要将其视为 PartialFunction,请使用 _

以下代码不起作用: FileSystems.getDefault.getPath 来自 java.nio 包

更新:

方法 createCalculation 是:

注意:MyLocation 是一个扩展 MyMessage 的案例类

//Req 是来自的类:net.liftweb.http.Req

编译器这样抱怨:

这是 fromJsonVal 的方法定义

JValue 来自 net.liftweb/json 并且是:sealed abstract class JValue()extends java.lang.Object with net.liftweb.json.Diff.Diffable { <> }

更新:编译器报告错误在这行代码中

你认为我应该如何纠正这个编译错误?

0 投票
1 回答
548 浏览

scala - Scala 中的偏函数和 Execute-Once 行为

编辑:我同意反对票的观点,但不同意解决方案。所以我已经更正/破坏了问题中的代码,所以它有解释的问题。我已经留下了答案和我原来的评论。在我看来,第 12 行的“def vs val”对于像我这样的初学者来说是一个不明显的问题。

我有一些我正在尝试编写的 Scala,但我无法让它完全按照我想要的方式运行。

我想做的是调用一些函数,这个函数应该接受一些配置参数,然后配置另一个函数并返回。然后调用者会重复使用这个返回的函数,知道它是以某种方式配置的。对返回函数的重复调用不应导致(昂贵的)配置重新运行。

例如;

然后调用者应该能够;

以上是我目前所拥有的经过编辑的剪切/粘贴。我实现的问题是每次调用“mySend”都会重新运行整个“sendConfigurationFor”,这不是我想要的。

我确定我读过“Scala Puzzler”,其中这种行为是出乎意料的(因此是错误的)答案。现在我实际上正在尝试使用我无法使用的相同行为 - 我也找不到谜题。

0 投票
1 回答
2933 浏览

scala - 如何使用 PartialFunction.applyOrElse

我有一个PartialFuncton[Throwable,Future[Result]]称为errorMap来将 throwable 转换为结果或失败的未来。我可以通过这样的方式做到这lift一点getOrElse

我认为同样应该可以实现applyOrElse,但我似乎无法弄清楚如何调用它来实现这一目标。我误解了什么applyOrElse是为了?

0 投票
1 回答
125 浏览

scala - 从集合类型参数上绑定的上下文中隐含

我有一些代码通过Stream使用 spray.json 将案例类转换为 json 表示来流式传输响应。这适用于单个案例类,但我想对其进行泛化。

所以我从这样的案例类开始:

在我的报告流式传输方法中,我有这样的代码(高度简化):

我想做的是泛化Report以支持更多项目:

但是现在,当然,该方法在 type 的范围内streamReport找不到 a 。JsonWriterAny

如果我添加一个上下文绑定到的类型参数,我可以做一些接近我想要的事情streamReport,并直接传入Report

但是,我无法弄清楚如何让它与PartialFunction. 以下内容无法编译(也不完全适合,因为部分函数的签名与上面不同):

我不确定哪里出了问题。它与类型擦除有关,还是与Try[Any]我的部分函数的参数类型有关?如何获得流的元素类型所需的隐式 JsonWriter?

0 投票
2 回答
881 浏览

scala - 以单个值收集多个偏函数的结果?

假设我有一些可能具有重叠域的部分函数:

我想将它们应用于一个值并收集在该 val 处定义的任何结果。我认为会有一种优雅的方式来使用collect它,但我能做的最好的就是

这似乎不干净。有没有办法使用内置的案例机制来测试定义性并同时进行评估,也许是通过将它们与测试值或类似的东西相结合?

0 投票
2 回答
500 浏览

scala - 不能将 PartialFunction 放在 scala 类构造函数中

似乎有一个限制,您不能PartialFunction在类构造函数中使用文字:

我的第一个问题是为什么部分函数文字需要访问“this”。我的第二个问题/观察是,在 Scala REPL 中,再次运行相同的代码会使 REPL 崩溃:

最后,这个问题有没有好的解决方法?

0 投票
1 回答
350 浏览

scala - Scala函数部分应用

我试图了解函数部分应用程序在 Scala 中的工作原理。

为此,我构建了这个简单的代码:

myCostumConcat函数输入一个字符串数组,它返回一个包含每个字符串第一个字母的列表。

所以,代码

将在控制台上打印:GPL

现在假设我想编写一个函数来生成 GPL 首字母缩写词,使用(作为输入参数)我之前的函数提取每个字符串的第一个字母:

使用部分应用程序运行这个新功能:

我收到此错误:

错误:(8, 46) 类型不匹配;发现:Seq[String] required: String GeneralPublicLicenceAcronym(myCustomConcat(_)) foreach print

为什么?在这种情况下我可以使用部分应用程序吗?

0 投票
3 回答
1779 浏览

scala - 将函数转换为部分函数

我有一个密封的特征:

我还具有处理所有消息并警告我有关非详尽匹配的功能:

Actor 需要 PartialFunction[Any, Unit]。PartialFunction 扩展了 Function,这意味着我不能将我的 Function 分配为 PartialFunction。

我写了简单的转换器:

但是有没有更好的方法来做到这一点?或者在标准 scala 库中是否有任何等价物?

0 投票
1 回答
62 浏览

scala - Scala 使用 () 应用 PartialFunction 与 .apply() 不同

当我想到这个想法时,我正在尝试在一个项目(Play Framework 2.4)中重构我的 scala 代码:

(为了提供一个最小的工作示例,我更改了一些类,例如,我分别使用 Int 和 Option[Int] 更改了 Result 和 Future[Result])

上面的代码编译。

然后我想:我应该将 fold[T] 参数化类型限制为 Int 和 Option[Int],所以我添加了:

但是这段代码不再编译,相反,如果我改变: fold(authenticated)(unauthenticated)(request)fold(authenticated)(unauthenticated).apply(request)(我已经添加了一个对apply()的显式调用)它编译。为什么会这样?在一个类上调用 () 和 .apply() 应该是一样的,不是吗?

编译器似乎要求将返回类型(Int 或 Option[Int])传递给 PartialFunction,而不是 CanBeAuthenticatedRequest 类型。

0 投票
2 回答
515 浏览

scala - 使用 case 语句时 isDefinedAt 方法如何工作?

在scala 中对部分函数解释中,使用了 case 语句,如下所示:

然后它说:

虽然这段代码没有显式实现 isDefinedAt 方法,但它的工作方式与之前的除法函数定义完全相同

前面的divide函数明确定义了apply和isDefined方法,如下:

我看到编译器在这里做了某种魔术,但我很好奇机制的性质:案例中的守卫(如果 d != 0)是否在后台提取到 isDefined 的主体中?有自己的警卫的多个案例陈述呢?函数的域是在 case 语句中定义的,因此这必须是编译器在幕后构建 isDefined 实现的方式。

我对吗?