Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 最重要的是什么';纯';面向对象语言?_Ruby_Oop_Block_Smalltalk - Fatal编程技术网

Ruby 最重要的是什么';纯';面向对象语言?

Ruby 最重要的是什么';纯';面向对象语言?,ruby,oop,block,smalltalk,Ruby,Oop,Block,Smalltalk,最近对Smalltalk的介绍启发了我“纯”面向对象风格的应用和好处。我以前在Ruby中看到过这一点的好处,尽管存在着非面向对象的if,excel等构造,但它似乎并没有将所有东西都进行到底 在这里,我所说的纯粹是“一切都是对象”(包括通过块或类似的函数)和没有过程风格的流控制,而是在布尔和集合上使用流控制方法 然而,即使在像Smalltalk这样的语言中,有些东西也不是面向对象的。例如,如果不使用特殊语法(:=而不是'is:'或类似的方法),并且从函数返回值似乎需要^operator,而它似乎不

最近对Smalltalk的介绍启发了我“纯”面向对象风格的应用和好处。我以前在Ruby中看到过这一点的好处,尽管存在着非面向对象的
if
excel
等构造,但它似乎并没有将所有东西都进行到底

在这里,我所说的纯粹是“一切都是对象”(包括通过块或类似的函数)和没有过程风格的流控制,而是在布尔和集合上使用流控制方法

然而,即使在像Smalltalk这样的语言中,有些东西也不是面向对象的。例如,如果不使用特殊语法(:=而不是'is:'或类似的方法),并且从函数返回值似乎需要^operator,而它似乎不属于任何对象


有哪种语言更能体现这种风格呢?

埃菲尔、Smalltalk和Ruby

作为一名长期的小人,我(与这里的许多其他答案相比)理解你的目标——而“自我”语言确实更进一步,至少在作业方面是这样。没有在self中编程,除此之外,我无法对其进行进一步的评论。另一种与self类似的较新语言是Slate,也是原型语言,也使用消息发送来分配任务。

纯净的好处是什么?纯度使Haskell的学习曲线明显高于其他函数式语言,因为从过程的角度来看,单子很难理解。@Chris:是的,但是一旦你掌握了单子,它就非常棒了。另一方面,这个问题似乎把纯洁的东西带得有点远。。。当然,您可以删除返回值,而不是要求通过对象状态进行这种通信(调用一个不会产生任何结果的方法,然后使用
self.result
),但这是我们程序员通常试图使所有内容的范围尽可能小的原因。另外,它将打破方法链接,因为并没有返回值,除非您定义某个对象属性为该值,但随后我们又回到了魔术。我完全认识到,这方面的纯粹性可能会使事情变得非常冗长,并且可能无法执行,但对于一种拥有非常小且一致的规则集的语言来说,这也有很大的好处。也就是说,我很想找到一种将事情推向极端的语言,即使只是为了一个好事情太多的好例子。你为什么认为if语句是“非面向对象的”?您需要if语句,它与面向对象无关。您确实需要流控制,但过程if语句不是实现这一点的唯一方法。例如,在Smalltalk中,您可以改为执行:条件ifTrue:[//true block]ifFalse:[//false block],其中条件是布尔对象。Ruby比Smalltalk更具混合性(例如,它具有
call/cc
等功能特性)。请阅读这个问题。这个链接实际上是一个很好的资源。十年前它是一个很好的资源。Java大约从2003年起就有泛型。@delnan:
call/cc
在任何直接公开调用堆栈的环境中都是不必要的,就像Squeak和Pharo所做的那样。不管怎样,
call/cc
是个坏主意:请继续部分。