[Libguestfs] [PATCH v6 2/3] mllib: modify nsplit to take optional noempty and count arguments

Richard W.M. Jones rjones at redhat.com
Tue Jan 31 11:35:01 UTC 2017


On Mon, Jan 30, 2017 at 10:43:15PM +0100, Tomáš Golembiovský wrote:
> Added two new optional arguments to nsplit:
> 
> * keep_empty: if set to false empty elements are not stored in the
>   returned list. The default is to keep the empty elements

The ?keep_empty flag is pointless.  It's simpler and more
clear to write:

  List.filter ((<>) "") (nsplit ...)

when you don't want empty elements.

However the ?count flag is fine, since that's what Perl's split
function also does.

> -    let rec nsplit sep str =
> +    let rec nsplit ?(keep_empty = true) ?(count = -1) sep str =
>        let len = length str in
>        let seplen = length sep in
>        let i = find str sep in
> -      if i = -1 then [str]
> +      if i = -1 || count = 0 then
> +        if str = "" && not keep_empty then [] else [str]
>        else (
>          let s' = sub str 0 i in
>          let s'' = sub str (i+seplen) (len-i-seplen) in
> -        s' :: nsplit sep s''
> +        let elem, count =
> +          if s' = "" && not keep_empty then
> +            [], count
> +          else
> +            [s'], if count > 0 then count-1 else count
> +        in
> +        elem @ nsplit ~keep_empty:keep_empty ~count:count sep s''

You can write this line as:

    elem @ nsplit ~count sep s''

(after dropping keep_empty).

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
libguestfs lets you edit virtual machines.  Supports shell scripting,
bindings from many languages.  http://libguestfs.org




More information about the Libguestfs mailing list