问题标签 [implicit-typing]

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

scala - 使用案例类应用:在 T 的范围内没有类型类 A 的成员

由于隐式转换,我无法编译函数。我有以下基本案例类:

然后在一个对象中我有以下功能

上面的代码可以正确编译,没有问题。现在我想创建一个函数来执行案例中的语句序列。所以我创建了以下辅助函数:

现在我尝试这样使用:

我得到了错误:

我已经戳了几个小时了,但没有运气。我认为这里的问题在于C[T](第三个代码片段)的定义。也许我必须在第一个参数的定义中添加一些东西f,这是一个函数,以便T正确确定隐式。

谁能告诉我如何纠正或进一步诊断这个问题?

TIA

0 投票
1 回答
69 浏览

scala - 如何重新参数化集合类型

我想定义一个通用集合的转换。

这抛出:

我必须在函数定义中声明S为参数化。GenIterable我想指定一个输出类型“无论创建的集合类型是什么S,用参数化的除外[(T,Int)]”,这样我就可以保证得到相同的集合类型,而不仅仅是GenIterable.

我怎样才能做到这一点?

0 投票
1 回答
89 浏览

c# - 在类初始值设定项中使用隐式类型数组

考虑以下:

我很想知道发生了什么。ListProp 设置器不会被调用。我们尝试分配 ArrayProp 的编译器错误表明,在内部,此分配将尝试调用“添加”方法。

PS:显然,代码可以这样工作:ArrayProp = new int[] { 4, 5, 6 }但这并不能满足我的好奇心:)

0 投票
1 回答
480 浏览

scala - 从返回类型推断泛型隐式参数的类型

说我有一个像这样的简单课程

在声明 val 时f2,编译器能够推断出函数隐式参数的类型fInt因为该类型与结果类型相同,结果类型需要与 value 的类型相匹配f2,即Int.

然而,把一个Ordering[A]混合在一起:

导致此编译错误:

模棱两可的隐含值​​:类型 => scala.collection.generic.CanBuildFrom[String,Char,String] 的对象 Predef 中的值 StringCanBuildFrom 和类型 [A]=> <:<[A,A] 的对象 Predef 中的方法 $conforms匹配预期类型 A

如果我在调用时添加类型信息f(),它会编译:

首先,我遇到了隐式排序的情况,我认为这与 Scala 推断从左到右有关;我认为它无法先匹配返回类型,然后推断f. 但是后来我在没有隐式排序的情况下尝试了这种情况,并看到它有效 - 它推断f必须参数化,Int因为返回类型必须是 an Int(因为f2是 an Int)。

请注意,如果我们删除implicit a: A并仅保留 Ordering 隐式参数,则错误仍然存​​在,但变为

从对象 Ordering 中的方法 Tuple9 开始的类型 Ordering[A] 的发散隐式扩展。

同样,添加类型参数使其变得有val f2: Int = f[Int]()帮助。

这是怎么回事?为什么编译器可以推断该参数A必须是一个Int,但不能推断该参数Ordering[A]必须是一个Ordering[Int]

0 投票
1 回答
466 浏览

scala - “无法证明 Object <:< Try[U]”在展平函数中

我有一个Map可能拥有相同类型的嵌套地图。这些嵌套地图中的每一个都有对外部地图的引用。

我已经定义了一个findValue查看当前地图的方法,如果它没有找到任何东西,它会转到它的父级,依此类推,直到到达null最外层的父级SymbolTable

我已将此行为放入 aTry中,以便我可以匹配Successand Failure; 但是,为了避免出现 a-la 类型,Try[Try[Try[ ... Try[TableVaue]... ]]]我将输出变平。

在尝试打电话时flatten,我收到以下错误:Cannot prove that Object <:< Try[U]

以下是相关的代码:

所以我的问题是:如何在不对代码进行任何重大重构的情况下完成这项工作?

0 投票
1 回答
45 浏览

groovy - Groovy 中隐式转换(到布尔值)的好处

我从静态类型语言来到 Groovy。而且我不明白隐式转换为布尔有什么好处?我认为这个功能很有争议而不是有用。

0 投票
1 回答
25 浏览

c# - C#:如何在 IF 块内定义隐式类型变量并在外部使用

我想做这样的事情:

问题是我不能这样做,因为您显然不能在不先声明隐式变量的情况下定义它,也不能在声明隐式变量后重新声明它。

假设我不知道数据的返回类型(隐式类型变量的整个点),那么合适的方法是什么?


编辑:

如果您的类型定义明确,那么下面的第一个答案效果很好,但是这样的事情呢?

0 投票
2 回答
121 浏览

recursion - F# 隐式类型在简单递归时阻塞

当我在 F# 中定义递归函数时:

...一切都很好。当我试图避免“空列表”问题时:

......我被大喊大叫:

我在这里想念什么?

0 投票
0 回答
48 浏览

generics - 不同类型的表达式中的 F# 隐式泛型函数参数

我有一个实用程序函数,它将记录错误消息(包括字符串格式)与引发异常(raise现有异常或failwith使用格式化的错误消息调用,类似于下面的 logAndFailWithf 函数(尽管实际上它使用日志框架,不写入文本文件):

如果直接调用此函数,则可以正常工作,如以下简单示例所示:

然而,在现实世界的场景中,日志函数被传递给另一个函数,当它遇到异常时使用它来记录和抛出异常,类似于以下内容:

在这种情况下,编译器会在第二个 let 绑定 ( ) 上报告错误,let y = ...并显示以下消息:

这似乎发生在与 log 函数的第一次使用不具有相同类型的表达式中任何 log 函数的使用(在上面的示例中,int64when bindingy而不是intwhen binding x),我无法找到一种表达log参数类型的方法,该方法既与函数的签名相匹配,logAndFailWithf又在同一函数中用于不同类型的表达式时起作用。

如何将此隐式泛型函数作为参数传递给其他函数,以便可以在不同类型的表达式中调用它?

0 投票
4 回答
76 浏览

swift - 你能在 Swift 中同时定义和实例化隐式类型吗?

只是在思考如何构建一些基于层次结构自动生成键的 UserDefaults 的语言。这让我想知道......是否可以像这样同时定义和实例化一个类型?

注意:我不能使用静态,因为我特别需要实例化,因此具有静态成员的嵌套结构/类不适用于我的情况。

这是我能想到的最接近的东西,但我讨厌我必须创建初始化程序来设置成员。我希望有一些不那么冗长的东西。

那么有没有更简单的方法呢?