182得票1回答
从宏中获取具有匿名类方法的结构类型

假设我们想编写一个宏,定义一个带有一些类型成员或方法的匿名类,然后创建一个该类的实例,该实例在静态类型上具有这些方法等结构类型。在2.10.0中,宏系统可以实现这一点,而类型成员部分非常容易: object MacroExample extends ReflectionUtils { i...

26得票8回答
鸭子类型,必须是动态的吗?

维基百科曾经关于鸭子类型说过: 在面向对象编程语言中,鸭子类型是一种动态类型的风格,在这种风格中,一个对象的当前方法和属性集决定了有效的语义,而不是从特定类或实现特定接口的继承。 (* 编者注:自发布此问题以来,维基百科文章已被编辑以删除“动态”一词。) 它对结构类型有如下解释: ...

24得票2回答
Scala中(递归)结构类型的有趣观察

我需要在一些使用特质和结构类型作为类型参数约束的代码中使用递归结构类型。它运行良好,但后来我了解到Scala不支持递归结构类型。那么,有人可以解释一下为什么这个代码能正常工作吗:scala> trait Test[M[A] <: { def map[B](f: A => B)...

21得票2回答
在Scala中匹配结构类型的模式

为什么这个代码会输出"wtf"?难道结构类型上不能使用模式匹配吗? "hello" match { case s: { def doesNotExist(i: Int, x: List[_]): Double } => println("wtf?") case _ =&...

20得票2回答
在Scala中为参数接受多个类型

我有两个对象,ObjectA和ObjectB,都有一个名为update()的方法。我想编写一个函数,可以接受ObjectA或ObjectB(但不接受其他类型)。从概念上讲,这是我的目标: def doSomething[T <: ObjectA | T <: ObjectB](o...

20得票4回答
C#有没有类似于Scala的结构类型的等价物?

在Scala中,我可以这样定义结构类型(structural types):structural types: type Pressable = { def press(): Unit } 这意味着我可以定义一个函数或方法,它的参数是Pressable类型的对象,如下所示: def fo...

18得票3回答
Scala:类型类和ADT的区别是什么?

类型类(Typeclasses)和抽象数据类型(Abstract Data Types)有什么区别? 我知道这对于Haskell程序员来说是基本的东西,但我来自Scala背景,希望能举出Scala的例子。目前我所找到的最好的解释是,类型类是“开放”的,而ADT则是“封闭”的。与结构类型进行比...

18得票2回答
TypeScript 中的"结构化接口类型化"是什么?

在他关于TypeScript的博客文章中,Mark Rendle说他喜欢它的其中一件事是: "接口的结构类型。我真的希望C#也能做到这一点" 他是什么意思呢?

17得票2回答
为什么Scala使用反射来调用结构类型上的方法?

如果函数接受结构类型,可以定义为:def doTheThings(duck: { def walk; def quack }) { duck.quack } 或者type DuckType = { def walk; def quack } def doTheThings(duck: Duc...

14得票1回答
Scala:如何通过结构类型在包外访问包可见方法

这不像预期的那样工作(因为我正在尝试从Services外部调用一个包私有的run): 这不按预期工作(因为我正试图从Services外部调用一个包私有的run):object Services { class HelloPrinter { private[Services] def ...