问题标签 [structural-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.
scala - 接受scala中参数的多种类型
我有两个对象,ObjectA 和 ObjectB,它们都有一个方法 update()。我想编写一个接受 ObjectA 或 ObjectB (但不接受其他类型)的函数。从概念上讲,这就是我想要做的:
我意识到还有其他方法可以解决这个问题(例如,update() 方法的结构类型、公共基类等),但我的问题是在 Scala 中可以这样做,如果可以,语法是什么?这叫什么?
scala - Traversable 的结构类型
我有这个方法:
但是当我这样称呼它时:
scala> foo(List(1,2,3))
我得到:
但是当我做这样的事情时:
有用。
我可能错过了一些非常基本的东西,以至于我忽略了它,但是我怎样才能使它工作呢?
scala - 结构类型和原语
当我发现对我来说看起来像一个错误时,我正在玩 Scala 的结构类型。这是我的代码:
我得到了这个错误:
首先,我不知道为什么这不起作用。其次,奇怪的是代码编译得很好,并在运行时抛出异常,说该方法实际上并不存在。
有人对此有解释吗?
scala - 为什么类型推断在这里不起作用?
这个问题出现在我正在编写的模块中,但我制作了一个表现相同行为的最小案例。
问题是编译器设法找出Minimal
( Int
) 的内部参数,但随后将另一个出现设置T
为Nothing
,这显然不匹配apply
。这些绝对是相同的T
,因为删除第一个参数会使第二个参数抱怨 T 未定义。
是否有一些歧义意味着编译器无法推断第一个参数,或者这是一个错误?我可以优雅地解决这个问题吗?
更多信息:此代码是尝试语法糖的简单示例。原始代码试图使|(a)|
的模均值a
,其中 a 是一个向量。显然|(a)|
比写作好|[Float,Vector3[Float]](a)|
,但不幸的是我不能用它unary_|
来让这更容易。
实际错误:
推断的类型参数 [Nothing,Minimal[Int]] 不符合方法应用的类型参数边界 [T,X <: Sugar.S[T]]
wpf - 如何为事件成员编写类型约束?
WPF 控件有许多事件成员,它们具有相同的名称,但不共享相同的接口或基类。F# 的类型约束支持编写函数,该函数适用于具有相同成员的所有对象。然后,如果我可以为事件成员编写类型约束,我可以编写 curried 函数,以方便许多控件的属性设置。
但是上面的代码不起作用..我想为事件成员编写类型约束是不可能的..因为这是一个小问题,如果我们通过语言特性解决每一个小问题,语言将变得如此复杂以至于没有人可以使用!(现在 F# 似乎强大而简单)
然后我想知道一些解决这个问题的替代方法,如果它存在的话。
scala - 是否可以在不使用反射的 Scala 中实现 `??`(来自 C# 的空合并运算符)?
我在某处找到了 C# 空合并运算符'??'的实现:
然后可以像a ?? b
which mean一样使用它if (a == null) b else a
。
在反编译类文件后,我看到它生成了带有反射的代码(在 Scala 2.8.1 中)。
为什么它会产生反射,是否可以修改该代码使其不会产生反射?
type-inference - 具有静态、结构类型和全局类型推断的命令式语言
我知道像 Haskell 这样的语言是静态类型的并且具有类型推断。但是是否存在具有全局类型推断的非函数式语言,相当于具有类型推断和结构类型的 C 语言。
scala - 结构子类型反射
我们可以val s: String
从函数外部获取使用反射的类型f
吗?
scala - 从宏中获取具有匿名类方法的结构类型
假设我们要编写一个宏来定义一个具有一些类型成员或方法的匿名类,然后创建该类的一个实例,该类的静态类型为具有这些方法的结构类型,等等。这在 2.10 中的宏系统中是可能的。 0,并且类型成员部分非常容易:
(提供我的方法ReflectionUtils
的便利特性constructor
在哪里。)
这个宏允许我们将匿名类的类型成员的名称指定为字符串文字:
请注意,它的类型正确。我们可以确认一切都按预期工作:
现在假设我们尝试用一个方法做同样的事情:
但是当我们尝试它时,我们没有得到结构类型:
但是,如果我们在其中添加一个额外的匿名类:
有用:
这非常方便——例如,它可以让你做这样的事情——但我不明白它为什么有效,并且类型成员版本有效,但不是bar
. 我知道这可能不是定义的行为,但它有什么意义吗?有没有更简洁的方法从宏中获取结构类型(及其上的方法)?