1
9
wiki文章真的很弱(它本身是否代表了一个抽象反转?:),这个概念本身就有点可疑。但它的基本要点似乎是抽象隐藏了一些基本元素,迫使抽象的用户重新实现它。
例如,在talk页面上,出现了一个更有趣的例子。假设一个CPU有一个
所以,回到斯卡拉。当然,在Scala中使用函数的程序员不会产生抽象反转,因为他不会被迫重新实现Scala的基本功能。 另一方面,可以说Scala将函数实现为类实例是抽象反转的实例。然而,要做到这一点,必须有两件事是正确的:
什么是函数?函数原语是什么样子的?在此上下文中,“函数”是指能够执行的数据。有人可能会说,实际上,所有汇编程序代码都是能够执行的数据——只是它不可移植,而且,更进一步说,它不是字节码,因此不符合设计原则。 另一方面,Java中的所有方法都被一个标识符引用,Java通过这个标识符定位要为给定对象的类层次结构执行的代码。虽然可以通过反射间接使用此标识符,但它不会公开。如果它是公开的,并且提供了一些功能来表示“调用此代码”,那么可以说可以围绕此构造一个函数。 所以,我想一个案例可以证明1是真的。我们继续下一个。 如果Java 做 如果提供“method”数据类型,Scala函数是否不再是类的实例?不,他们不会。Scala的一个基本设计方面是,运行程序的每个元素都是一个对象。Java已经拥有的“原语”就好像它们是带有方法的普通对象一样,如果有一个“方法”原语,它也会这样。 方法原语的一个可能结果是将方法提升为一等公民,但函数本身几乎不会改变。 |
2
5
通过一个对象实现一个函数并不仅仅因为这是JVM上可能实现的,它直接切入Scala的基本原理。
一切
是一个对象:函数、参与者、数字文本等。任何对象也可以应用(通过定义
这种二元性是许多标准库api设计的基础,它允许将映射同时视为函数(将键映射到值)和对象(键/值对的集合)。 Scala是一个真正的对象/功能混合体,两种范式都不占主导地位。 |
3
2
不,它不能被看作是抽象倒置。原因很简单:在Scala中 选择 您喜欢哪个抽象级别。大多数时候写作更方便
但要走“长”路也没问题:
由于FunctionN是特性,所以可以在继承中使用混合,这使得您可以避免类似于C++中的函子的情况。E、 g.您可以将Java地图“改装”为一个函数:
|
4
1
我不相信。在Scala中实现一级函数的方法就是,一个实现细节。 |
Sudhanva c · 如何提高编码技能?[已关闭] 6 年前 |
hoffm · 为什么Ruby找不到调用方类中定义的常量? 7 年前 |
Thamme Gowda · “lambda”关键字的较短替代项? 7 年前 |
AlphaModder · 有没有带有“不寻常”访问修饰符的编程语言? 9 年前 |
lucasasecas · 有可能静态地使用动态语言吗? 10 年前 |
Eugenio Laghi · 仅由括号、加号和感叹号组成的语言 10 年前 |
dallin · 数组中的逗号运算符是否有名称? 10 年前 |