调用。WHY
对声明的东西返回围绕它构建的特殊注释。这很酷。我如何引用在类中定义的子例程?它总是隐藏的吗?我对提供子例程而不是类的模块很好奇(答案可能是“不要这样做”)。我主要是在玩的限制。为什么
以及我能走多远。
#| This is the outside bit
sub outside { 137 }
put &outside.WHY; # This works
#| Class Foo is an example
class Foo {
#| The bar method returns a number
method bar { 137 }
#| quux is a submethod
submethod quux { 137 }
#| qux is private
submethod !qux { 137 }
#| The baz method also returns a number
sub baz { 37 }
put &baz.WHY; # this works in this scope
}
put "---- With an object";
quietly {
my $object = Foo.new;
put "As object: ", $object.WHY;
# sub is not really a method?
put "As object - bar: ", $object.^find_method( 'bar' ).WHY;
# should this work? It *is* private after all
put "As object - qux: ", $object.^find_method( 'qux' ).WHY;
}
put "---- With class name";
quietly {
put Foo.WHY;
put "As class lookup: ", ::("Foo").WHY;
put "As class lookup (quux): " ~ Foo.^lookup( 'quux' ).WHY;
put "As class lookup (baz): " ~ Foo.^lookup( 'baz' ).WHY; # nope!
# this is the part where I need help
put "As :: lookup: ", ::("Foo")::("&baz").WHY; #nope
}
以下是输出:
This is the outside bit
The baz method also returns a number
---- With an object
As object: Class Foo is an example
As object - bar: The bar method returns a number
As object - qux:
---- With class name
Class Foo is an example
As class lookup: Class Foo is an example
As class lookup (quux): quux is a submethod
As class lookup (baz):
As :: lookup:
这是我要问的最后一行输出。如何访问类中定义的子例程?
这只是工作中的词汇范围:
SUB默认为“我的代码”,因此如果您想从外部获取它们,您必须添加我们的代码(或者以其他方式手动公开它们-据我所知,没有内置的方法来获取它们,无论是通过MOP还是其他元编程功能,如“我的:: 伪包”)。
我对提供子例程而不是类的模块很好奇
这就是is export
的目的。
# should this work? It *is* private after all put "As object - qux: ", $object.^find_method( 'qux' ).WHY;
以下两项工作:
put "As object - qux: ", $object.^find_private_method('qux').WHY;
put "As object - qux: ", $object.^private_method_table<qux>.WHY;
(find\u private\u method
似乎没有记录在p6doc中,所以我不确定它是否是官方API。private\u method\u table
有记录,尽管没有真正解释。)
# this is the part where I need help put "As :: lookup: ", ::("Foo")::("&baz").WHY; #nope
如果您将sub-baz{37}声明为我们的sub-baz{37},则此选项有效
您还可以更简单地将查找编写为:
put "As :: lookup: ", &Foo::baz.WHY;
我们的声明器(在大纲3“声明器”一节中解释)将一个符号与当前包(在本例中是一个类)相关联,以便可以使用语法从外部访问它。
默认情况下,子例程的作用域是词汇性的,即如果没有指定它们的默认声明符,则它们的默认声明符是my。(这句话基本上与我写的效果相同
我对提供子例程而不是类的模块很好奇
如上图所示,使用我们的声明它(在这种情况下,用户范围必须使用完全限定名称Foo::baz),或者将其导出到用户范围中(在这种情况下,他们可以将其称为baz)。
使符号可导出的最简单方法是使用is export特性:
module Foo { #| The baz method also returns a number sub baz is export(:ALL) { 37 } } import Foo :ALL; say &baz.WHY;
use
语句隐式调用有关模块的import
。由于这里的模块定义在同一个文件中,我们可以直接调用import。
请注意,您还可以编写sub baz is export{37}(不带:ALL
),在这种情况下,只要类是使用
'd或
导入
'ed,默认情况下就会导入符号。但在Perl 5/CPAN社区中,这被认为是不好的做法,建议用户导入单个符号。在Perl 6中,导入单个符号还不起作用,因此我建议现在使用
:ALL标记。
1)我知道的唯一区别是,在第一种情况下,例程知道自己的名称以进行内省。
我目前正在尝试理解mpi4py。我设置了和,因为我不明白为什么我们想要自动初始化和终结。默认行为是在导入MPI时调用。我认为这样做的原因是,对于每个等级,都运行了一个python解释器实例,每个实例都将运行整个脚本,但这只是猜测。最后,我喜欢把它说清楚。 现在这引入了一些问题。我有这个密码 导致 我对这里发生的事情有点困惑。如果我移动在析构函数的末尾,它可以正常工作。 并不是说我也使用h5py,它
问题内容: 这两个类别有何不同? 有什么明显的区别吗? 问题答案: 是一个 类变量 。 的是一个 实例变量 。 即的被实例之间共享。 用可以像列表这样修改的东西更容易证明区别: 输出量
我目前正在尝试理解mpi4py。我设置了和,因为我不明白为什么我们想要自动初始化和终结。默认行为是在导入MPI时调用。我认为这样做的原因是,对于每个等级,都运行了一个python解释器实例,每个实例都将运行整个脚本,但这只是猜测。最后,我喜欢把它说清楚。 现在这引入了一些问题。我有这个密码 导致 我对这里发生的事情有点困惑。如果我移动到解构函数的末尾,它可以正常工作。 并不是说我也使用h5py,它
问题内容: 有什么用的,并在Hibernate?因为我在互联网上发现的每个示例都将数据插入到单个表中,并使用两个不同的类来做到这一点。我的观点是,如果我使用单个表,那么我可以在单个类中映射所有列,那么为什么要使用不同的类。如果我们使用两个不同的表,则存在和hibernate关系。 问题答案: Hibernate 1中有两种对象。Value Object2 。实体 价值对象 是不能独立存在的对象。以
我们为什么使用: 而不是: ?
我使用Gson Library 2.8.0将JSON字符串转换为Java Hashmap,Maven作为构建系统,Tomcat作为WebApp运行我的代码。IDE:IntelliJ Idea 问题是每当我运行我的代码,执行停止和抛出类NotFound异常。 代码==>