问题标签 [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 Currying:部分函数用空参数覆盖函数
我正在尝试通过使用部分函数来实现/覆盖具有空输入参数的函数。这个不起作用的最小示例最好地解释了这一点:
编译器抱怨:object creation impossible, since method build in trait TFactory of type ()T is not defined
,这是有道理的,因为构建的类型是(Int)()T
. 我的下一个想法是build
明确地使函数的类型接受一个空参数并返回 a T
,即:
现在很明显 的类型build
是() => T
。令我惊讶的是,编译器现在抱怨object creation impossible, since method build in trait TFactory of type => () => T is not defined
(注意类型突然以 a 开头=>
)。在函数定义的末尾拼命添加空括号也无济于事。
如何让我的编译器相信这些类型实际上是相同的?
澄清:
我的主要目标是实现无参数初始化,T
而不需要工厂的工厂。例子:
结论:
build
我认为这是不可能的,因为抽象函数只是决定了函数必须采用多少个参数块。换句话说:你不能通过一个函数来实现一个抽象函数,它的部分应用恰好与你试图实现的函数具有相同的签名。
scala - 在 Scala 中使用 andThen 链接 PartialFunction
让我们重用 Daily scala 中的示例:
让我们补充一下:
然后在这里按预期工作:
返回true
iff x == 1
(实际上,pf2
根本不需要是 PartialFunction)
但是,我预计:
将返回false
所有x
(即,如果定义了 pf1,则检查 pf3),但它不会且仅验证 pf1。
最后,pf1 andThen pf3 lift(x)
总是会导致 MatchError。我宁愿得到 None... 我可以通过提升每个函数来获得这种行为,例如 inpf1.lift(x).flatMap(pf3.lift)
但是使用纯 PartialFunction API 有没有更简单的方法?(并且没有单独提升每个部分功能?)
scala - 使用部分函数参数方法的基类型的 Scala 值类编译失败
说,我定义了一个值类如下
编译失败并显示以下消息:
错误消息对我来说似乎没有那么有意义,就像我替换collect
为map
(需要一个函数而不是部分函数)或类不扩展AnyVal
,代码片段将编译。
任何人都可以解释背后的原因或链接到提交的问题吗?
scala - 定义一个扩展PartialFunction的对象,直接用case实现
我对 Scala 很陌生,但我已经喜欢它了。我已阅读有关偏函数的教程和文章。我想要实现的是拥有一个扩展 PartialFunction[...,...] 的对象并直接用案例定义它,而不需要定义 isDefinedAt 和 apply 方法。
例如
是偏函数的有效定义。但是为什么我不能写
? 这将取消定义 isDefinedAt 和 apply 的需要,并使编写某些(由我正在使用的库预定义)类型的类更容易。
scala - 如何将 scala Map 转换为部分函数
目前我使用以下代码片段:
在我看来,地图自然应该定义一个偏函数。Scala 是否有任何标准/更简洁和明确的方式将映射转换为部分函数?也许某种隐式转换?
scala - 在 map、flatmap、...偏函数中使用元组
如果我做:
没关系。
如果我做:
也没关系。
但如果我这样做:
不起作用。
为什么要使用“case”关键字来使用命名元组?
scala - Compose partial functions
I have two PartialFunctions f
and g
.
They have no side effects and are quick to execute.
What's the best way to compose them into another partial function h
such that
h.isDefinedAt(x)
iff f.isDefinedAt(x) && g.isDefinedAt(f(x))
?
It's also OK if h
is a function returning an Option
rather than a partial function.
I'm disappointed that f andThen g
does not do what I want:
scala - 按类型划分的案例如何在 scala 中工作?
我知道案例类、模式匹配、取消应用和 PartialFunction,但我对下面的宏片段感到困惑。
MemberScope 的 Scaladoc http://www.scala-lang.org/api/2.10.4/#scala.reflect.api.Scopes $MemberScope
收集方法接受PartialFunction[Universe.Symbol, B]
我找不到unapply
方法,MethodSymbol
它也不是案例类的特征,所以在女巫代码编译器中转换
scala - 如何在Scala中部分应用带有类型参数的案例类
所以我有一个元组,我想将它作为 Scala 中案例类的参数传递。对于没有类型参数的案例类,这很容易,我可以这样做:
但是,如果案例类有类型参数,它似乎不起作用:
如何部分应用带有类型参数的案例类?我正在使用 Scala 2.10.3。
scala - Scala:PartialFunction 的函数定义不明确
PartialFunction 的函数定义如下:
PartialFunction 将允许我们使用case
with collect
on collection 进行过滤。例如,当您有整数列表和 PartialFunction isEven[Int, String] 时,如果集合中的值为偶数,它将转换为 String。因此它返回一个新集合,其返回类型+B
在定义中。
我的问题是,为什么contravariant -A
和covariance +B
?它基本上有能力接受任何输入到任何输出。为什么我们需要指出输入应该是A类型的任何类型或超类型,而返回类型应该是B或其子类?我们不能说: