问题标签 [unapply]

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 回答
819 浏览

scala - 是否可以在 Scala 中将参数隐式转换为提取器(不适用)?

我创建了一个名为 CaseInsensitive 的类,它包装了一个字符串(请参阅实现一个在 Scala 中执行不区分大小写比较的字符串类)。

我创建了一个 case 类,它有一个 CaseInsensitive 类型的成员变量,所以它有一个默认的 unapply 方法,该方法提取一个 CaseInsensitive 类型的变量,但我希望像这样使用它:

此代码无法编译:(在提取器行,而不是构造器行)

但我认为我从 String 到 CaseInsensitive 的隐式转换可以编译,而不是我必须输入更详细的内容:

这是不区分大小写的实现:

0 投票
5 回答
1290 浏览

scala - 提取器是否可以在 case 语句的主体(或任何其他使用提取器的地方)中使用参数进行定制?

基本上,我希望能够构建一个自定义提取器,而不必在使用它之前将其存储在变量中。

这不是我如何使用它的真实示例,它更有可能用于正则表达式或其他一些字符串模式(如构造)的情况下,但希望它解释了我正在寻找的内容:

只做一个自定义提取器并没有太大区别,但是如果您为案例语句构建大量提取器列表,则通过将所有提取器与其用法分开可能会使事情变得更难阅读。

我希望答案是否定的,你不能这样做,但我想我会先问问周围的人:D

0 投票
3 回答
4036 浏览

class - 如何对具有多个参数列表的类进行模式匹配?

考虑这个类:

如果我想匹配以下内容,该unapply方法会是什么样子:

我试过这个:

但这并没有真正奏效。

0 投票
1 回答
1079 浏览

scala - Scala - 可以取消应用返回可变参数吗?

下面的对象L1有效。我可以通过传入可变参数来“创建”一个L1,这很好,但我希望能够L1使用相同的语法分配给一个。不幸的是,我在这里完成的方式需要ArrayL1.

我试图以一种显而易见的方式完成此任务,L2如下所示:

但这给出了错误:

是否可以unapply以这种方式使用可变参数?

0 投票
4 回答
1344 浏览

scala - Scala 是否允许这种提取器?

假设我有这个集合:

有没有办法定义一个提取器,它可以通过以下方式工作:

抱歉伪代码,但我不知道如何表达它。有没有办法匹配以 5 作为最后一个元素的东西?如果我想匹配第一个元素为 1,最后一个元素为 5 的东西怎么办?这是否适用于各种长度的数组(请注意,我在示例中专门为我的数组选择了不同的长度)。

谢谢!

0 投票
1 回答
2016 浏览

scala - Scala - unapply 的隐式转换

我想要一个提取器来隐式转换它的参数,但它似乎不起作用。考虑这个非常简单的案例:

但我无法按预期使用它:

谁能解释为什么它无法将参数从转换StringMyString?我希望它会string2mystring("a")即时调用。显然我可以通过说 来解决这个问题val Apply(y) = MyString("a"),但似乎我不应该这样做。

注意:这个问题与这个问题类似但是 1)对于为什么会发生这种情况并没有一个很好的答案,2)这个例子比它需要的更复杂。

0 投票
3 回答
9227 浏览

scala - unapply 和 unapplySeq 有什么区别?

为什么 Scala 同时具有unapplyunapplySeq?两者有什么区别?我什么时候应该更喜欢其中一个?

0 投票
2 回答
8968 浏览

scala - Scala: Case class unapply vs a manual implementation and type erasure

I'm trying to understand what Scala does with Case Classes that makes them somehow immune to type erasure warnings.

Let's say we have the following, simple class structure. It's basically an Either:

And you're trying to use it like this:

Everything compiles and runs without any problems. However, when I try implementing the unapply method myself, the compiler throws a warning. I used the following class structure with the same Main class above:

Compiling that with the -unchecked flag issues the following warning:

Now, I understand type erasure and I've tried to get around the warning with Manifests (to no avail so far), but what is the difference between the two implementations? Are case classes doing something that I need to add in? Can this be circumvented with Manifests?

I even tried running the case class implementation through the scala compiler with the -Xprint:typer flag turned on, but the unapply method looks pretty much like I expected:

0 投票
1 回答
1268 浏览

scala - Scala - 添加不适用于 Int

我希望能够做到这一点:

但是Int没有unapply方法。

我找到了这个答案,它提供了有关如何向现有对象隐式添加方法的说明,所以我试了一下。他们提供的解决方案有效,但不幸的是不适用于模式匹配。这是我所拥有的:

这些测试用例都很好:

但我想要的失败了:

如果隐式转换有效并且模式匹配unapply有效,为什么Scala不将这两个东西放在一起进行隐式模式匹配呢?

0 投票
2 回答
1729 浏览

scala - Scala 匹配错误与 unapply

我正在http://www.scala-lang.org/node/112上尝试代码,但我收到了一个看起来不应该抛出的匹配错误。

这是原始代码:

我只是添加了几行来测试当我传递一个奇数时会发生什么:

据我所知,21 或任何奇数的情况也应该由对象中的 unapply 方法处理。有人可以解释为什么不是这样吗?