为什么Ruby比Python更适合Rails?

Python和Ruby通常被认为是亲密的表亲(虽然历史包袱颇为不同),performance力和力量相似。 但有些人认为,Rails框架的巨大成功与它所build立的语言确实有很大的关系:Ruby本身。 那么为什么Ruby比Python更适合这样的框架呢?

可能有两个主要区别:

Ruby有优雅的匿名封闭。

Rails使用它们效果很好。 这是一个例子:

class WeblogController < ActionController::Base def index @posts = Post.find :all respond_to do |format| format.html format.xml { render :xml => @posts.to_xml } format.rss { render :action => "feed.rxml" } end end end 

匿名闭包/ lambdas可以更容易地模拟新的语言function,将采取块。 在Python中,闭包存在,但必须命名才能使用。 因此,您不必使用闭包来模拟新的语言特性,而是要明确表示您正在使用闭包。

Ruby更清洁,更易于使用元编程。

这在Rails中被广泛使用,主要是因为它使用起来非常简单。 具体来说,在Ruby中,你可以在类的上下文中执行任意代码。 以下片段是相同的:

 class Foo def self.make_hello_method class_eval do def hello puts "HELLO" end end end end class Bar < Foo # snippet 1 make_hello_method end class Bar < Foo; end # snippet 2 Bar.make_hello_method 

在这两种情况下,你都可以这样做:

 Bar.new.hello 

这将打印“你好”。 class_eval方法也接受一个string,因此可以在创build方法时随时创build方法,这些方法根据传入的参数具有不同的语义。

事实上,在Python(以及其他语言)中也可以做这种元编程,但是Ruby有一定的作用,因为元编程并不是一种特殊的编程风格。 它来源于Ruby中的事实,一切都是对象,所有的代码行都是直接执行的。 因此, Class es本身就是对象,类实体self指向Class,并且可以在创build类时调用该类上的方法。

这在很大程度上负责Rails中可能声明的程度,以及我们能够轻松实现看起来像关键字或新块语言特性的新声明性特性。

那些争论的人

Rails框架的巨大成功确实与它所build立的语言有很大关系

(IMO)是错的。 这个成功可能更多的是聪明和持续的营销,而不是任何技术实力。 Django可以说在很多领域做得比较好(比如内置的kick-asspipe理器),而不需要Ruby的任何特性。 我并没有放弃Ruby,只是站在Python的立场!

Python社区认为,做事可能是最简单直接的方式,是高雅的最高forms。 ruby社区认为,以聪明的方式做事情,允许酷代码是优雅的最高forms。

Rails是如果你遵循某些约定,所有其他的事情神奇地发生在你身上。 这个jive非常适合看世界的ruby方式,但并不真正遵循python的方式。

这次辩论是一个新的“vim与emacs”辩论吗?

我是一个Python / Django程序员,到目前为止,我从来没有发现这个语言/框架的问题,导致我切换到Ruby / Rails。

我可以想象,如果我有Ruby / Rails的经验,这将是相同的。

两者都有类似的理念,并以快捷优雅的方式完成工作。 更好的select是你已经知道的。

就我个人而言,我发现ruby在许多方面比Python更优越,这就是我所说的“一致的performance力”。 例如,在ruby中,join是一个输出string的数组对象的方法,所以你得到这样的东西:

 numlist = [1,2,3,4] #=> [1, 2, 3, 4] numlist.join(',') #=> "1,2,3,4" 

在python中,join是一个string对象的方法,但是如果你把它传递给一个string而不是string,那么就会抛出一个错误,所以同样的构造就像这样:

 numlist = [1,2,3,4] numlist #=> [1, 2, 3, 4] ",".join([str(i) for i in numlist]) #=> '1,2,3,4' 

随着时间的推移,这些小小的差异有很多。

另外,我想不出引入隐形逻辑错误的更好方法,而不是使空白显着。

真正的答案是Python和Ruby都不是Web框架的更好/更差的候选者。 如果你想要客观性,你需要在两者中编写一些代码,看看哪个最适合你的个人喜好,包括社区。

大多数为某个人辩护的人,或者从不认真对待其他语言,或者因为他们的个人偏好而“投票”。

我猜想大多数人会先决定和他们进行接触,因为它教会他们一些新的东西(MVC,testing,生成器等等),或者做一些更好的事情(插件,模板等等)。 我曾经使用PHP进行开发,并与RubyOnRails联系。 如果我在findRails之前就已经了解了MVC,那么我很可能不会把PHP留在后面。 但一旦我开始使用Ruby,我喜欢的语法,function等

如果我已经find了Python及其MVC框架之一,那么我会更赞赏这种语言!

Python有一大堆像Rails一样的框架。 有太多的笑话,在PyCon的典型谈话中,至less有一个Web框架会看到灯光。

Rubys元编程会使它更适合的观点是IMO不正确。 你不需要像这样的框架元编程。

所以我认为我们可以得出这样的结论:Ruby在这方面并不比Python好(也可能不差)。

因为Rails是为了利用Rubysfunction集而开发的。

一个类似的无问题的问题是“为什么Python比Ruby更适合Django?”。

我想我们不应该讨论语言特征本身 ,而应该讨论各个社区对语言特征的口音。 例如,在Python中,重新打开一个类是完全可能的,但它并不常见; 在Ruby中,重新开放课程是日常实践的一部分。 这允许按照当前的需求快速和直接地定制框架,并且使Ruby比任何其他dynamic语言更有利于类Rails框架。 因此,我的答案是:重新开放课程的共同使用。

有人说,使用ActiveRecord(轨道的一个关键组件)所需的元编程types在ruby中比在python中更容易和更自然 – 我还不知道python),所以我不能亲自证实这个说法。

我简单地使用了rails,使用catchalls / interceptors和dynamic评估/代码注入确实可以让你在比其他一些框架(在它的时间之前)更高的抽象层次上运行。 我对Python的框架有很less或没有经验,但我听说它的能力也是一样 – 而且Python社区在支持和促进pythonic努力方面做得很好。

我认为语法更清晰,对于我来说,Ruby至less更“愉快” – 就像主观一样!

两个答案:

一个。 因为rails是为ruby编写的。

湾 出于同样的原因,C比Ruby更适合于Linux

所有这一切都是“恕我直言”

在Ruby中有一个Web应用程序框架,所以它是唯一被该语言广告的框架。

自从Python诞生以来,Python已经有几个了:Zope,Twisted,Django,TurboGears(它本身就是其他框架组件),Pylons(Rails框架的一个有点克隆)等等。 没有一个是python-community-wide支持的“使用者”,所以所有的“接地井”都分散在几个项目中。

由于Rails的原因,Rails的社区规模完全是或者至less在绝大多数情况下是。

Python和Ruby都完全有能力做web应用程序框架。 使用一个你(和你的潜在的开发团队)喜欢,并可以alignment。