Bob*_*man 9 ruby python language-features programming-languages language-design
Ruby使用require,Python使用import.它们是完全不同的模型,虽然我更习惯require模型,但我可以看到一些我认为import更喜欢的地方.我很好奇人们发现这些模型中的每一个都特别容易 - 或者更有趣,更难以应对.
特别是,如果您正在编写新的编程语言,您将如何设计代码加载机制?哪种"专业"和"缺点"会对您的设计选择产生最大影响?
u0b*_*6ae 14
Python的import一个主要特点是它将两个东西联系在一起 - 如何找到导入以及在什么命名空间中包含它.
这会创建非常明确的代码:
import xml.sax
这指定了根据Python搜索路径的规则在哪里找到我们想要使用的代码.
同时,例如,我们想要访问的所有对象都存在于这个确切的命名空间下xml.sax.ContentHandler.
我认为这是Ruby的要求的优势.require 'xml'事实上,可能会在命名空间内创建对象,XML或者在模块中提供任何其他命名空间,而这一点在需求行中无法直接显示.
如果xml.sax.ContentHandler太长,您可以在导入时指定其他名称:
import xml.sax as X
Run Code Online (Sandbox Code Playgroud)
它现在可用于X.ContentHandler.
这种方式Python要求您显式构建每个模块的命名空间.因此,Python命名空间非常"物理",我将解释我的意思:
例如,如果我们有小Python包"过程"与内部子模块machine和interface,我们希望市直包名,代表这个作为一个方便的命名空间,这是和例子是什么,我们可以在"包定义"文件写process/__init__.py:
from process.interface import *
from process.machine import Machine, HelperMachine
Run Code Online (Sandbox Code Playgroud)
因此,我们举起什么通常会被作为访问process.machine.Machine最多process.Machine.我们以非常明确的方式将所有名称添加process.interface到process命名空间.
我写的Python导入的优点只有两个:
import