я могу назвать ^methods
на объекте и список имен методов можно назвать:Почему я не могу вызвать метод методов на объекте ClassHOW Perl 6?
my $object = 'Camelia';
my @object_methods = $object.^methods;
@object_methods.map({ .gist }).sort.join("\n").say;
^methods
возвращает список, который я хранить в @object_methods
, потом я преобразовать этот список методов thingys по телефону gist
на каждом чтобы получить человеко-разумную форму этого метода.
Но, то ^
в ^methods
подразумеваемая .HOW
, как показано в конце object documentation это должно работать также:
my $object = 'Camelia';
my @object_methods = $object.HOW.methods;
Но, я получаю сообщение об ошибке:
Too few positionals passed; expected 2 arguments but got 1
in any methods at gen/moar/m-Metamodel.nqp line 490
in block <unit> at...
И , для чего это стоит, это ужасное сообщение об ошибке для языка, который пытается быть дружелюбным к человеку в отношении такого рода вещей. Файл m-Metamodel.nqp не является частью моей установки perl6. Это даже не то, что я могу сделать Google, потому что, как указывает путь, это то, что генерирует компиляция. И эта компиляция зависит от версии.
Где это документально? –
В том же документе, к которому вы привязались, к языку/объектам, говорится: «Вызывающее соглашение для методов на метаобъектах - это вызов метода на метаобъекте и передача в объект, представляющий интерес, в качестве первого аргумента для объекта. », а также говорит, что« скажем 1.^имя »; «тот же, что и», скажем 1.HOW.name (1); » – timotimo
Вот пример, который я вижу более четко, но отсутствует [документация для метода] (http://doc.perl6.org/routine/methods#role_Metamodel::MethodContainer). Он отмечает, что он проверяет класс, и он показывает аргумент $ obj, но я ожидал, что это объект ClassHOW (который, как я ожидал, уже знал, кто его создал). –