Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re^3: RFC: Inline::Blocks or inline as a keyword?

by tobyink (Canon)
on Sep 09, 2018 at 20:04 UTC ( [id://1221999]=note: print w/replies, xml ) Need Help??


in reply to Re^2: RFC: Inline::Blocks or inline as a keyword?
in thread RFC: Inline::Blocks or inline as a keyword?

Each type constraint knows how to generate a string of Perl code for validating a value, given a variable name for the value.

For example:

$ perl -MDevel::Hide=Ref::Util::XS,Type::Tiny::XS -MTypes::Standard=-t +ypes -E'say HashRef->inline_check(q/$myvar/)' Devel::Hide hides Ref/Util/XS.pm, Type/Tiny/XS.pm (ref($myvar) eq 'HASH')

So the ArrayRef[HashRef] type constraint can use that when generating a longer bit of code to validate an arrayref of hashrefs:

$ perl -MDevel::Hide=Ref::Util::XS,Type::Tiny::XS -MTypes::Standard=-t +ypes -E'say ArrayRef->of(HashRef)->inline_check(q/$myvar/)' Devel::Hide hides Ref/Util/XS.pm, Type/Tiny/XS.pm do { (ref($myvar) eq 'ARRAY') and do { my $ok = 1; for my $i (@{$myvar +}) { ($ok = 0, last) unless (ref($i) eq 'HASH') }; $ok } }

Replies are listed 'Best First'.
Re^4: RFC: Inline::Blocks or inline as a keyword?
by LanX (Saint) on Sep 09, 2018 at 21:34 UTC
    Are you saying you are dynamically generating code for your type checks which is eval'ed?

    Not sure if that's the meaning of "inlining" in this thread.

    Probably I'm missing your point...

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

      The ArrayRef and Int type constraints are smart enough to know how to combine to make an ArrayRef[Int] type check which inlines the Int check inside a loop over the array. This inline code is evaled within a sub { ... } to create a single coderef which checks that a value is an arrayref, and all elements in the arrayref are integers.

      That code can also be retrieved as a string for inlining into larger coderefs like constructors, etc.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1221999]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others browsing the Monastery: (4)
As of 2024-04-24 04:53 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found