No, that's not it either. words is "split at whitespace until you've made
$limit chunks". It doesn't know or care what you do afterward with the Seq.
And the [] are afterward, they apply to the Seq, not to words() which
doesn't even know about them.

On Wed, Sep 26, 2018 at 5:19 PM ToddAndMargo <toddandma...@zoho.com> wrote:

> >> On Wed, Sep 26, 2018 at 2:57 AM Todd Chester <toddandma...@zoho.com
> >>     multi method words(Str:D $input: $limit = Inf --> Positional)
>
>
> On 9/26/18 7:21 AM, Brandon Allbery wrote:
>
> > $limit sets a limit on how many words it will make. Inf means there's no
> > limit. Your assumption that it must be some kind of array index doesn't
> > make a lot of sense; this doesn't index at all, it splits at whitespace
> > until it's got the number of chunks you told it to make, indexing the
> > result is your problem. Small pieces of functionality, not "god
> > functions" that try to do everything you can possibly think of.
>
> Hi Brandon,
>
> So, "$limit = Inf" means that I can put an infinite number of
> stuff in the [] or ()
>
>     p6 '"a b c d e".words(3)[2,4].say;'
>     (c Nil)
>
>     $ p6 '"a b c d e".words(3).say;'
>     (a b c)
>
>
> I really think that could be written better.
>
> First off the parameter is not a "limit".  It is
> a selection.
>
> And second, "Inf" is a "type", meaning "infinity" or larger
> than Perl's memory allocation can handle.  It is confusing
> to use it to state that there can be any number of selections
> in the parameter.
>
>     $ p6 '"a b c d e".words()[2,4,1,3,3,3,3,20].say;'
>     (c e b d d d d Nil)
>
> It also does not tell that the parameter(s) is/are integers
> or what happens if you supply a sting (error) or a real (it
> truncates):
>
>      $ p6 '"a b c d e".words()["a"].say;'
>      Cannot convert string to number: base-10 number must begin
>      with valid digits or '.' in '⏏a' (indicated by ⏏)
>      in block <unit> at -e line 1
>
>     $ p6 '"a b c d e".words()[ 2.5 ].say;'
>     c
>
> Third, it does not state the difference between using () and [].
> Or how to mix and match them.
>
>     $ p6 '"a b c d e".words(3).say;'
>     (a b c)
>
> Where (3) gives you the first three words
>
> -T
>


-- 
brandon s allbery kf8nh
allber...@gmail.com

Reply via email to