Python和Ruby通常被认为是近亲(尽管具有不同的历史包容),具有相似的表现力和功能。但是有人认为,Rails框架的巨大成功确实与它所基于的语言(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
匿名闭包/ lambda使模拟可能会阻塞的新语言功能更加容易。在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
它将打印“ HELLO”。该class_eval方法还带有一个String,因此可以在创建类时动态创建方法,这些方法基于传入的参数具有不同的语义。
实际上,可以用Python(以及其他语言)进行这种元编程,但是Ruby有优势,因为元编程不是一种特殊的编程风格。它源于以下事实:在Ruby中,一切都是对象,并且所有代码行都直接执行。结果,Classes本身就是对象,类主体self指向Class,并且您可以在创建类时在类上调用方法。
这在很大程度上要归因于Rails中可能的声明性程度,以及我们能够轻松实现看起来像关键字或新的块语言功能的新声明性功能的原因。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。