问题标签 [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.
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 { <> }
更新:编译器报告错误在这行代码中
你认为我应该如何纠正这个编译错误?
scala - Scala 中的偏函数和 Execute-Once 行为
编辑:我同意反对票的观点,但不同意解决方案。所以我已经更正/破坏了问题中的代码,所以它有解释的问题。我已经留下了答案和我原来的评论。在我看来,第 12 行的“def vs val”对于像我这样的初学者来说是一个不明显的问题。
我有一些我正在尝试编写的 Scala,但我无法让它完全按照我想要的方式运行。
我想做的是调用一些函数,这个函数应该接受一些配置参数,然后配置另一个函数并返回。然后调用者会重复使用这个返回的函数,知道它是以某种方式配置的。对返回函数的重复调用不应导致(昂贵的)配置重新运行。
例如;
然后调用者应该能够;
以上是我目前所拥有的经过编辑的剪切/粘贴。我实现的问题是每次调用“mySend”都会重新运行整个“sendConfigurationFor”,这不是我想要的。
我确定我读过“Scala Puzzler”,其中这种行为是出乎意料的(因此是错误的)答案。现在我实际上正在尝试使用我无法使用的相同行为 - 我也找不到谜题。
scala - 如何使用 PartialFunction.applyOrElse
我有一个PartialFuncton[Throwable,Future[Result]]
称为errorMap来将 throwable 转换为结果或失败的未来。我可以通过这样的方式做到这lift
一点getOrElse
:
我认为同样应该可以实现applyOrElse
,但我似乎无法弄清楚如何调用它来实现这一目标。我误解了什么applyOrElse
是为了?
scala - 从集合类型参数上绑定的上下文中隐含
我有一些代码通过Stream
使用 spray.json 将案例类转换为 json 表示来流式传输响应。这适用于单个案例类,但我想对其进行泛化。
所以我从这样的案例类开始:
在我的报告流式传输方法中,我有这样的代码(高度简化):
我想做的是泛化Report
以支持更多项目:
但是现在,当然,该方法在 type 的范围内streamReport
找不到 a 。JsonWriter
Any
如果我添加一个上下文绑定到的类型参数,我可以做一些接近我想要的事情streamReport
,并直接传入Report
:
但是,我无法弄清楚如何让它与PartialFunction
. 以下内容无法编译(也不完全适合,因为部分函数的签名与上面不同):
我不确定哪里出了问题。它与类型擦除有关,还是与Try[Any]
我的部分函数的参数类型有关?如何获得流的元素类型所需的隐式 JsonWriter?
scala - 以单个值收集多个偏函数的结果?
假设我有一些可能具有重叠域的部分函数:
我想将它们应用于一个值并收集在该 val 处定义的任何结果。我认为会有一种优雅的方式来使用collect
它,但我能做的最好的就是
这似乎不干净。有没有办法使用内置的案例机制来测试定义性并同时进行评估,也许是通过将它们与测试值或类似的东西相结合?
scala - 不能将 PartialFunction 放在 scala 类构造函数中
似乎有一个限制,您不能PartialFunction
在类构造函数中使用文字:
我的第一个问题是为什么部分函数文字需要访问“this”。我的第二个问题/观察是,在 Scala REPL 中,再次运行相同的代码会使 REPL 崩溃:
最后,这个问题有没有好的解决方法?
scala - Scala函数部分应用
我试图了解函数部分应用程序在 Scala 中的工作原理。
为此,我构建了这个简单的代码:
myCostumConcat函数输入一个字符串数组,它返回一个包含每个字符串第一个字母的列表。
所以,代码
将在控制台上打印:GPL
现在假设我想编写一个函数来生成 GPL 首字母缩写词,使用(作为输入参数)我之前的函数提取每个字符串的第一个字母:
使用部分应用程序运行这个新功能:
我收到此错误:
错误:(8, 46) 类型不匹配;发现:Seq[String] required: String GeneralPublicLicenceAcronym(myCustomConcat(_)) foreach print
为什么?在这种情况下我可以使用部分应用程序吗?
scala - 将函数转换为部分函数
我有一个密封的特征:
我还具有处理所有消息并警告我有关非详尽匹配的功能:
Actor 需要 PartialFunction[Any, Unit]。PartialFunction 扩展了 Function,这意味着我不能将我的 Function 分配为 PartialFunction。
我写了简单的转换器:
但是有没有更好的方法来做到这一点?或者在标准 scala 库中是否有任何等价物?
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 类型。
scala - 使用 case 语句时 isDefinedAt 方法如何工作?
在scala 中对部分函数的解释中,使用了 case 语句,如下所示:
然后它说:
虽然这段代码没有显式实现 isDefinedAt 方法,但它的工作方式与之前的除法函数定义完全相同
前面的divide函数明确定义了apply和isDefined方法,如下:
我看到编译器在这里做了某种魔术,但我很好奇机制的性质:案例中的守卫(如果 d != 0)是否在后台提取到 isDefined 的主体中?有自己的警卫的多个案例陈述呢?函数的域是在 case 语句中定义的,因此这必须是编译器在幕后构建 isDefined 实现的方式。
我对吗?