问题标签 [implicit]
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.
debugging - 是否有一种系统的方法来发现哪些隐式定义在范围内,以及哪些在特定点被绑定?
通常不需要关注 Scala 中的隐式参数,但有时了解编译器如何自动提供它们非常有帮助。不幸的是,这种理解似乎很难获得!
是否有一种通用方法可以发现在给定代码中如何提供隐式参数?
理想情况下,有一天 IDE 集成会以某种方式提供此信息,但我希望现在我必须深入挖掘。有没有办法让编译器准确解释它在任何给定点选择的隐式定义?这可以从其他编译器输出中间接破译吗?
例如,我想知道如何自己解决implicit bf: CanBuildFrom[Repr, B, That]
论点的TraversableLike.map
来源,而无需阅读Stack Overflow 上的此类问题!
scala - 为什么类的第一个参数列表不能是隐式的?
为什么Scalac会在类声明中提供的隐式参数列表之前插入一个空参数列表?
从 scalac 来源中的评论来看,这似乎是一个功能,而不是一个错误:
// 如果它是唯一的参数部分,则将 (implicit ... ) 转换为 ()(implicit ... )
我很想知道为什么会这样做。我觉得相当令人惊讶。
string - passing CustomString& into a constructor won't implicit convert from "string"
I can get the compiler (msvc++ express) to convert "string" as a CustomString in a constructor, but not with a reference. Will it therefore not have the same chance of being optimized out with a pass-by-reference anyway, like passing by value with other types can, if the compiler thinks it can?
won't implicit convert using
:
will :
scala - Scala:使用依赖注入协调类型类
最近 Scala 的博主似乎对类型类模式充满热情,其中一个简单的类具有由符合某些特征或模式的附加类添加的功能。作为一个非常简单的例子,简单的类:
可以适应 Foo 特质:
在这个类型类的帮助下:
类型类通常在编译时使用隐含捕获,允许 Wotsit 及其类型类一起传递到更高阶的函数中:
(在你纠正我之前,我说这是一个过于简单的例子)
但是,隐式的使用假定项的精确类型在编译时是已知的。我发现在我的代码中通常情况并非如此:我将拥有某种类型的项目 List[T] 的列表,并且需要发现正确的类型类来处理它们。
Scala 建议的方法似乎是在调用层次结构中的所有点添加 typeclass 参数。随着代码的扩展,这可能会变得很烦人,并且这些依赖项需要通过越来越不相关的方法传递到越来越长的链中。这使得代码混乱且难以维护,这与 Scala 的用途相反。
通常这是依赖注入介入的地方,使用库在需要的时候提供所需的对象。细节因为 DI 选择的库而异——我过去曾用 Java 编写过自己的库——但通常注入点需要精确定义所需的对象。
麻烦的是,在类型类的情况下,精确值在编译时是未知的。必须根据多态描述来选择它。至关重要的是,编译器已经删除了类型信息。清单是 Scala 的类型擦除解决方案,但我还不清楚如何使用它们来解决这个问题。
人们会建议 Scala 的哪些技术和依赖注入库来解决这个问题?我错过了一个技巧吗?完美的 DI 库?或者这真的是它看起来的症结所在?
澄清
我认为这实际上有两个方面。在第一种情况下,需要类型类的点是通过直接函数调用从其操作数的确切类型已知的点到达的,因此足够的类型争论和语法糖可以允许将类型类传递给点它是需要的。
在第二种情况下,这两个点被一个屏障隔开——例如一个不能更改的 API,或者存储在数据库或对象存储中,或者序列化并发送到另一台计算机——这意味着类型类可以' t 与其操作数一起传递。在这种情况下,给定一个类型和值仅在运行时已知的对象,需要以某种方式发现类型类。
我认为函数式程序员习惯于假设第一种情况 - 使用足够先进的语言,操作数的类型将始终是可知的。David 和 mkniessl 对此提供了很好的答案,我当然不想批评这些。但是第二种情况确实存在,这就是我将依赖注入引入问题的原因。
scala - 在 scala 中拉皮条我的函数 - 对函数应用隐式转换
当我想使用隐式方法将函数转换为其他函数时,我遇到了一些问题。
我在 Scala 2.8 中实现了一个小型 DSL 用于测试目的。它应该支持对实例的各种检查(如果你愿意,可以断言)。整个 DSL 有点复杂,但下面的简化示例显示了我的问题:
前两行 println (当我显式调用转换方法时)编译并工作正常,但最后一行(当我想依赖隐式时)产生错误:
Compile error: missing arguments for method b in object PimpMyFunction; follow this method with '_' if you want to treat it as a partially applied function
如果我想隐式转换“正常”实例(不是函数)同样的工作方式,所以我猜这个问题与范围/导入无关。
如果我按照错误消息的说明使用println((b _).isZeroIn(a0))
它也可以,但是 DSL 是针对非技术人员的,所以我希望尽可能保持语法简洁。
我想我有另一种解决方法(b 应该是一个扩展 Assertions 特征的类,它已经包含检查方法 + A => Int),它将支持更简洁的语法,但它会更冗长且不太灵活,所以我更喜欢隐式方式。
任何想法如何避免(b _)
语法并仍然使用隐式?
c++ - 删除带有 void 指针作为成员的嵌套结构?
我有以下课程:
pop
方法是:
oldHead
是一个指向 a 的指针struct Link
,它有一个 void 指针作为成员。所以通过删除oldHead
,我隐含地删除了那个 void 指针,对吧?
我正在阅读 Bruce Eckel 的 Thinking in C++,它说删除 void 指针并不能正确清理,因为delete
需要知道指针的类型。
此代码隐式删除 void 指针data
,因此:有人可以解释为什么删除 void 指针的这种(隐式)方式与删除 with 不同delete <void pointer>
吗?
scala - Scala:将返回类型转换为自定义特征
我编写了一个扩展 Iterator[A] 的自定义特征,并且我希望能够使用我在从另一个方法返回的 Iterator[A] 上编写的方法。这可能吗?
我仍在努力理解整个隐含的事情,并且不太喜欢在Bar
对象定义中编写方法。我将如何包装这样的物品以按照我上面想要的方式工作?
scala - 隐含的奇怪行为
我正在使用Scalacheck库来测试我的应用程序。在那个库中有一个Gen
对象,它定义了任何对象到该类的对象生成器的隐式转换。
例如,导入Gen._
允许您调用sample
任何对象上的方法,通过其隐式转换为Gen
:
在此示例中,隐式Gen.value()
应用于"foo"
,产生一个始终返回 的生成器Some(foo)
。
但这不起作用:
为什么不?
更新
我正在使用 Scala 2.7.7final 和 ScalaCheck 2.7.7-1.6。
更新
刚刚使用 ScalaCheck 2.8.0-1.7 切换到 Scala 2.8.0.final。问题确实消失了。
scala - 隐式转换以实例化密封类
我有这个遗产
和
但是,我想这样做:
我该怎么做?
asp.net - ASP.NET:显式与隐式本地化?
在我看来,隐式本地化优于显式本地化的优势在于,如果您有多个属性要针对给定控件进行本地化,则它是一种更经济的语法。
在您只需要本地化一些文本的情况下,我使用 asp:Localize 控件,它只有一个呈现给 UI 的属性(文本)。有理由使用其中一个吗?有什么风格偏好吗?有速度差异吗?
隐式
对比
显式