加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

内省 – Perl 6是否与Python的dir()相当?

发布时间:2020-12-15 21:30:52 所属栏目:大数据 来源:网络整理
导读:我试图在Perl中变得舒适6.当我在REPL提示符下时,我发现 Python中的一个方便的东西是我可以做一个目录(对象),并找出一个对象的属性,在Python中包括对象的方法. 这通常有助于提醒我想做什么; “哦,没错,Python中的修剪被称为”strip“,这样的事情. 在Perl 6中,
我试图在Perl中变得舒适6.当我在REPL提示符下时,我发现 Python中的一个方便的东西是我可以做一个目录(对象),并找出一个对象的属性,在Python中包括对象的方法.

这通常有助于提醒我想做什么; “哦,没错,Python中的修剪被称为”strip“,这样的事情.

在Perl 6中,我知道内省方法.WHO,.WHAT,.WHICH,.HOW和.WHY,但这些都是在类或对象级别.我如何找到对象内部的内容,以及我能做什么?

解决方法

How do I find out what’s inside an object,and what I can do to it?

你提到你已经知道了内省的方法 – 但是你是否知道你可以通过查询一个对象元对象(可从.HOW)获得什么?

$perl6
>
> class Article {
*   has Str $.title;
*   has Str $.content;
*   has Int $.view-count;
* }
>
> my Str $greeting = "Hello World"
Hello World
>
> say Article.^methods
(title content view-count)
>
> say Article.^attributes
(Str $!title Str $!content Int $!view-count)
>
> say $greeting.^methods
(BUILD Int Num chomp chop pred succ simplematch match ords samecase samemark 
samespace word-by-word trim-leading trim-trailing trim encode NFC NFD NFKC NFKD 
wordcase trans indent codes chars uc lc tc fc tclc flip ord WHY WHICH Bool Str 
Stringy DUMP ACCEPTS Numeric gist perl comb subst-mutate subst lines split words)
>
> say $greeting.^attributes
Method 'gist' not found for invocant of class 'BOOTSTRAPATTR'
>

有一个查询对象的元对象的快捷方式;
a.^ b翻译成a.HOW.b(a). Article的方法和属性本身就是对象 – 方法和属性的实例.每当你在一个对象上调用.say,你就会隐式地调用它的.gist方法,这个方法是给你一个对象的汇总的字符串表示,即它的“gist”.

内置Str类型的属性似乎是类型为BOOTSTRAPATTR类型 – 不实现.gist方法.作为替代,我们可以直接要求属性来吐出他们的名字;

> say sort $greeting.^methods.map: *.name ;
(ACCEPTS BUILD Bool DUMP Int NFC NFD NFKC NFKD Num Numeric Str Stringy WHICH WHY 
chars chomp chop codes comb encode fc flip gist indent lc lines match ord ords perl
pred samecase samemark samespace simplematch split subst subst-mutate succ tc tclc
trans trim trim-leading trim-trailing uc word-by-word wordcase words)
>
> say sort $greeting.^attributes.map: *.name
($!value)
>

你可以找到我们更多的here(这是答案来自哪里).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读