2024-06-06 23:58:28 发布
网友
Python和Ruby通常被认为是近亲(尽管历史包袱截然不同),具有相似的表现力和力量。但是有些人认为Rails框架的巨大成功与它所构建的语言:Ruby本身有很大关系。那么为什么Ruby比Python更适合这样一个框架呢?
那些认为
the immense success of the Rails framework really has a great deal to do with the language it is built on
我错了。这种成功可能更多地归功于聪明和持续的营销,而不是任何技术能力。Django可以说在许多方面(例如内置的kick-ass管理)做得更好,而不需要Ruby的任何特性。我一点也不反对Ruby,只是支持Python!
python社区认为,以最简单、最直接的方式做事是优雅的最高形式。ruby社区认为,用聪明的方式做一些事情,让代码变得酷,是优雅的最高形式。
如果您遵循某些约定,那么Rails就是您的全部内容,大量的其他事情会神奇地发生在您身上。这与ruby看待世界的方式结合得很好,但并没有真正遵循python的方式。
可能有两个主要区别:
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使模拟需要块的新语言特性更加容易。在Python中,闭包是存在的,但必须命名才能使用。因此,您不能使用闭包来模拟新的语言特性,而是被迫明确地说明您正在使用闭包。
这在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方法也接受一个字符串,因此在创建类时,可以动态创建基于传入参数具有不同语义的方法。
class_eval
实际上,用Python(以及其他语言)进行这种元编程是可能的,但是Ruby有一个优势,因为元编程不是一种特殊的编程风格。它来自于这样一个事实:在Ruby中,所有的东西都是一个对象,所有的代码行都是直接执行的。因此,Classes本身就是对象,类主体有一个指向类的self,您可以在创建类时调用该类的方法。
Class
self
这在很大程度上决定了Rails中可能的声明性程度,以及我们实现新的声明性特性(看起来像关键字或新的块语言特性)的容易程度。
那些认为
我错了。这种成功可能更多地归功于聪明和持续的营销,而不是任何技术能力。Django可以说在许多方面(例如内置的kick-ass管理)做得更好,而不需要Ruby的任何特性。我一点也不反对Ruby,只是支持Python!
python社区认为,以最简单、最直接的方式做事是优雅的最高形式。ruby社区认为,用聪明的方式做一些事情,让代码变得酷,是优雅的最高形式。
如果您遵循某些约定,那么Rails就是您的全部内容,大量的其他事情会神奇地发生在您身上。这与ruby看待世界的方式结合得很好,但并没有真正遵循python的方式。
可能有两个主要区别:
Ruby有优雅的匿名闭包。
Rails使用它们的效果很好。下面是一个例子:
匿名闭包/lambdas使模拟需要块的新语言特性更加容易。在Python中,闭包是存在的,但必须命名才能使用。因此,您不能使用闭包来模拟新的语言特性,而是被迫明确地说明您正在使用闭包。
Ruby有更干净、更容易使用的元编程。
这在Rails中被广泛使用,主要是因为它的使用非常简单。具体来说,在Ruby中,可以在类的上下文中执行任意代码。以下代码段是等效的:
在这两种情况下,您可以执行以下操作:
上面会写“你好”。
class_eval
方法也接受一个字符串,因此在创建类时,可以动态创建基于传入参数具有不同语义的方法。实际上,用Python(以及其他语言)进行这种元编程是可能的,但是Ruby有一个优势,因为元编程不是一种特殊的编程风格。它来自于这样一个事实:在Ruby中,所有的东西都是一个对象,所有的代码行都是直接执行的。因此,
Class
es本身就是对象,类主体有一个指向类的self
,您可以在创建类时调用该类的方法。这在很大程度上决定了Rails中可能的声明性程度,以及我们实现新的声明性特性(看起来像关键字或新的块语言特性)的容易程度。
相关问题 更多 >
编程相关推荐