我怎么知道我可以使用特定签名调用Perl 6方法?

时间:2017-06-17 04:01:37

标签: signature perl6

在Perl 6中,一种多调度语言,您可以找出是否存在与名称匹配的方法。如果有,您将获得与该名称匹配的Method对象列表:

class ParentClass {
    multi method foo (Str $s) { ... }
    }

class ChildClass is ParentClass {
    multi method foo (Int $n) { ... }
    multi method foo (Rat $r) { ... }
    }

my $object = ChildClass.new;

for $object.can( 'foo' )
    .flatmap( *.candidates )
    .unique -> $candidate {
    put join "\t",
        $candidate.package.^name,
        $candidate.name,
        $candidate.signature.perl;
    };


ParentClass foo :(ParentClass $: Str $s, *%_)
ChildClass  foo :(ChildClass $: Int $n, *%_)
ChildClass  foo :(ChildClass $: Rat $r, *%_)

这没关系,但这是很多工作。我宁愿做一些更简单的事情,例如:

 $object.can( 'foo', $signature );

我可以做很多工作来实现这一目标,但是我错过了已经存在的东西吗?

1 个答案:

答案 0 :(得分:1)

当我点击提交这个问题时,我有了这个想法,这似乎仍然是太多的工作。 cando方法可以测试Capture(签名的倒数)。我可以grep那些匹配:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select name="s1">
    <option value="">Select</option>
    <option id="1" value="Facebook and Twitter">Value 1</option>
    <option id="2" value="Google and Yandex">Value 2</option>

</select>
<select name="s2" id="select2">
    <option value="">Select</option>
    <option value="Okay">Value 1</option>
    <option value="No">Value 2</option>
 </select>

我不确定我是否喜欢这个答案。