【发布时间】:2015-12-16 22:48:25
【问题描述】:
如果Ruby受到Smalltalk的影响很大,不知道Ruby中是否有类似Smalltalk中的printNl的等效方法?
我非常着迷,在 Smalltalk 中,你实际上有一些东西,比如一个字符串,然后你将消息 printNl(用于使用换行符打印)发送到字符串对象。它是以 OOP 方式进行的,而不是 p obj 或 puts obj 的程序方式。
我只找到了Object 的display 方法,它没有displayNl 替代方法。 Ruby 里面有吗?
只是为了好玩我做了以下,但我想知道如果它污染了 Object 类会不会不好:
class Object
def displayNl
self.display
"\n".display
end
end
"hello world".displayNl
5.displayNl
3.14.displayNl
Time.now.displayNl
Time.displayNl
Fixnum.displayNl
[1,3,5].displayNl
{foo: "bar"}.displayNl
-----------------
$ ruby try.rb
hello world
5
3.14
2015-12-16 14:44:09 -0800
Time
Fixnum
[1, 3, 5]
{:foo=>"bar"}
【问题讨论】:
-
需要考虑的是 Ruby 不是 SmallTalk。虽然它们有相似之处,但试图让一种语言使用另一种语言的语法或方法会导致代码不直观,尤其是对于那些在你编写完代码后必须使用它的人来说。维护和善待同事对于代码的可行性非常重要。我建议采用 Ruby 自己为 Ruby 代码做事的方式,并在编写代码时坚持 SmallTalk 的方式。您会发现,随着您使用更多语言工作,来回跳转变得更加容易。否则你会发疯的。像我们大多数人一样。
-
Smalltalk 也不是 SmallTalk ;)
-
@theTinMan 实际上,Ruby 跟随 Smalltalk 制作了所有的值对象,所以如果 object 打印出自己是有意义的,就像大约 50 年前的做法一样。当然,如果 Ruby 没有那样做并且每个人都在效仿,那不就是这样吗……但是如果有
display_nl,那么我不明白为什么使用它会有负面影响影响其他不熟悉它的人 -
@LeandroCaniglia 所以它是 JavaScript 和 Smalltalk 呵呵...