- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
鉴于:
import shapeless._
import syntax.singleton._
case class Foo(a: String, one: Witness.`1`.T)
Foo.apply _
和
Foo.unapply _
有不同的签名,即
Int(1)
与
Int
, 分别?
scala> Foo.apply _
res5: (String, Int(1)) => Foo = <function2>
scala> Foo.unapply _
res6: Foo => Option[(String, Int)] = <function1>
最佳答案
据我所知,在 scala.tools.nsc.typechecker.Namers
(编译器代码),apply
以前由 completerOf
生成和 caseApplyMethodCompleter
, 而 unapply
曾经来自 completerOf
.这个和可能的其他因素,可能是一些微妙的错误,导致 unapply
丢失类型信息。 This change稍微重构代码并导致两种方法都通过新的 applyUnapplyMethodCompleter
,修复它。由于似乎没有关于这个问题的任何票证,真正的原因需要一些额外的挖掘。假设这不是预期的行为可能是安全的。
关于scala - 使用单例类型理解 `apply` 和 `unapply`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44781579/
在 object Sized (在“shapeless/sized.scala”中)有 unapplySeq ,不幸的是它不提供静态检查。例如,下面的代码将在运行时失败并显示 MatchError :
我想要一个提取器来隐式转换它的参数,但它似乎不起作用。考虑这个非常简单的案例: case class MyString(s: String) {} implicit def string2mystri
在下面的代码中,我试图了解 Foo#unapply : Option[Int] 在模式匹配方面的用法。 $ls Test.scala $cat Test.scala object Test { c
显然,提取器对象中的 unapply/unapplySeq 不支持隐式参数。假设这里有一个有趣的参数 a 和一个令人不安的普遍存在的参数 b,在提取 c 时可以很好地隐藏它。 [ 编辑 ]:在我的 i
我有一个从字符串中提取对象的提取器。 case class ItemStructure(id: String, data: String) object ItemStructure { def u
我真的不明白这个小东西。我有一个抽象类 Box 有几个不同类型的子类。例如 abstract class Box class StringBox(val sValue : String) extend
我有以下情况,给定两种类型 MA 和 MB,我希望能够证明它们不仅具有 Applicative 而且它们都具有相同的基础形状。我尝试执行以下操作: type UnapplyM[TC[_[_]], MA
以下代码: object Test { @inline def unapply(i: Int): Option[String] = i match { case 1 => So
我刚刚发现我的提取器中的 unapply 出于某种原因被调用了两次。任何人都知道为什么,以及如何避免它? val data = List("a","b","c","d","e") object Uap
如果我不在 Some 方法中使用 unapply,为什么以下代码不起作用? scala> object T { | def unapply(i:Int) = (i+1,i+2) //Some
Django runserver 提示: You have unapplied migrations; your app may not work properly until they are ap
阅读 this ,我仍然对返回 Boolean 的 unapply() 有疑问。 如果查看 Scala Programming Book (2nd edition),第 602 页。有一个例子: ca
我有以下代码旨在在同一个提取器中定义 unapply 和 unapplySeq test("pattern matching define unapply and unapplySeq") {
鉴于: import shapeless._ import syntax.singleton._ case class Foo(a: String, one: Witness.`1`.T) 为什么要F
我希望能够做到这一点: scala> val Int(i) = "1" i: Int = 1 但是Int没有 unapply方法。 我找到了 this answer它给出了如何向现有对象隐式添加方法的
为什么 Scala 同时具有 unapply 和 unapplySeq?两者有什么区别?我什么时候应该选择其中一种而不是另一种? 最佳答案 无需深入细节并稍微简化一下: 对于常规参数apply构造和u
什么是unapply方法是Scala?它是如何工作的? 我知道 OCaml 等其他语言中的模式匹配,通常你几乎无法控制它。 Scala 在提供方面是独一无二的吗unapply方法,或者是否有其他语言提
我不能在 unapply 上使用泛型吗?提取器的方法以及隐式“转换器”以支持特定于参数化类型的模式匹配? 我想这样做( 注意在 [T] 行 上使用 unapply ), trait StringDec
我尝试创建一个用于模式匹配的 unapply 方法,并尝试使其返回与 Option 不同的内容,但是,Eclipse 将其显示为错误。是否存在 unapply 必须返回 Option[T] 的规则?
考虑以下代码: case class User(id: Int, name: String) object User{ def unapply(str: String) = Some(User(0
我是一名优秀的程序员,十分优秀!