我试图在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(这是答案来自哪里).