开发者社区> 问答> 正文

为什么Ruby比Python更适合Rails?

Python和Ruby通常被认为是近亲(尽管具有不同的历史包容),具有相似的表现力和功能。但是有人认为,Rails框架的巨大成功确实与它所基于的语言(Ruby本身)有很大关系。那么,为什么Ruby比Python更适合于这样的框架?

展开
收起
祖安文状元 2020-02-22 15:48:37 675 0
1 条回答
写回答
取消 提交回答
  • 可能有两个主要区别:

    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中可能的声明性程度,以及我们能够轻松实现看起来像关键字或新的块语言功能的新声明性功能的原因。

    2020-02-22 15:48:56
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载