在角色 Metamodel::MethodContainer 中§
有关方法查找,请参阅主要文档 在上下文中
method lookup(, --> Method)
返回提供的 $name
的第一个匹配 Method
对象,如果没有找到方法对象,则返回 (Mu)
。通过遵循 $obj
的 mro
来搜索匹配的方法对象。请注意,lookup
应该用于内省,如果您追求可以调用的东西,您可能希望改用 find_method
。
say 2.5.^lookup("sqrt").raku; # OUTPUT: «method sqrt (Rat $: *%_) ...»say Str.^lookup("BUILD").raku; # OUTPUT: «submethod BUILD (Str $: :$value = "", *%_ --> Nil) ...»say Int.^lookup("does-not-exist"); # OUTPUT: «(Mu)»
find_method
和 lookup
之间的区别在于,find_method
将对参数化角色使用默认候选,而 lookup
在这种情况下会引发异常,并且 find_method
尊重 FALLBACK
方法,而 lookup
则不尊重。
在 Metamodel::ClassHOW 中§
有关方法查找,请参阅主要文档 在上下文中
method lookup(, --> Method)
返回具有提供名称的第一个匹配 Method
。如果未找到方法,则返回一个特定于 VM 的哨兵值(通常是一个低级别的 NULL 值),可以用对 definedness
的测试进行测试。它可能比 .^can
更快,但不会提供所有候选的完整列表。
say Str.^lookup('Int').raku; # OUTPUT: «method Int (Str:D $: *%_) { #`(Method|39910024) ... }»for <upper-case uc># OUTPUT:# method `upper-case` not found# FOO