Python和Perl中是否有像Ruby中那样的全局对象?

2024-05-19 00:21:06 发布

您现在位置:Python中文网/ 问答频道 /正文

在Ruby中,当我们简单地定义一个方法时:

def test
  puts "test!"
end

它成为一个全局对象上的方法(没有独立的函数),我们甚至可以:

^{pr2}$

或者

^{3}$

因为全球环境本身就是一个物体。。。在

这对Python和/或Perl有效吗?如果没有,可以模拟吗?在

编辑

我是个编译器爱好者。在

实际上,我正在尝试为这三种语言实现一个编译器,它们使用Objective-C运行时的名称空间版本。我试图弄清楚如何在另一种语言上访问用一种语言定义的方法/类/对象。类层次结构应该是完全不同的,但是如果全局定义的方法(如我在Ruby中所示)可以直接从另一个方法中进行透明的访问,这将非常有用,因此我试图找出Perl和Python与Ruby相比是如何处理这些事情的。对于这个问题,我也很感激你的建议。在

虽然这个问题也应该与其他人有关,但我相信/希望如此。:)


Tags: 对象方法函数test语言编译器定义def
3条回答

在perl中,内容将存储在包含包的符号表中(除main之外的所有包本身都包含在main的符号表中)。在

%main::是主包表。包表中的值通常是glob,但有时是其他的东西(例如forward声明的原型)。在

更新:我看到你现在在问题中描述了你的实际目标。在我看来你想读perlcall。{a2很难翻译}(除非你想用一个修改过的目标代码)开始编译。在

在Perl中,UNIVERSAL类是所有其他类的基础。在

sub UNIVERSAL::method { ... }

$obj->method()     # Works regardless of the object's class
$class->method()   # Works regardless of the class name

这通常是你想要避免的。在

如果您使用的是Moose对象系统,那么应该将该方法放在一个角色中,该角色将分配给应该具有该方法的类。在

Perl并不像Ruby那样是一种纯面向对象的语言。所以不是所有的东西都是对象,函数也不一定是方法。在

在Perl中,讨论包(大致相当于名称空间)更有意义。Perl5中没有全局变量;所有内容都属于一个包中。如果您不另外说,它将放在一个名为main的包中。在

相关问题 更多 >

    热门问题