Can't understand for String.delete

Returns a copy of _str_ with all characters in the intersection of
     its arguments deleted. Uses the same rules for building the set of
     characters as +String#count+.

        "hello".delete "l","lo" #=> "heo"
        "hello".delete "lo" #=> "he"
        "hello".delete "aeiou", "^e" #=> "hell"
        "hello".delete "ej-m" #=> "ho"

What does this mean?
I can't understand for the rules.

Thanks.

What it means is that it builds a character set performing the
intersection of all arguments to the method. So if you do
s.delete("h", "he") the intersection of the arguments is "h", because
it's the only one present in all arguments. If the arguments don't
intersect nothing is deleted:

irb(main):001:0> "hello".delete "h", "e"
=> "hello"

The other part of the explanation means that as the documentation for
String#count says
(class String - RDoc Documentation):

"Any other_str that starts with a caret (^) is negated. The sequence
c1—c2 means all characters between c1 and c2. "

This means that s.delete("^aeiou") will remove all consonants and
leave the vocals, and that s.delete("a-m") will delete all characters
between "a" and "m":

irb(main):002:0> "hello".delete "a-m"
=> "o"
irb(main):003:0> "hello".delete "^aeiou"
=> "eo"
irb(main):004:0>

Hope this helps,

Jesus.

···

On Tue, Nov 24, 2009 at 2:41 PM, Ruby Newbee <rubynewbee@gmail.com> wrote:

Returns a copy of \_str\_ with all characters in the intersection of
its arguments deleted\. Uses the same rules for building the set of
characters as \+String\#count\+\.

   &quot;hello&quot;\.delete &quot;l&quot;,&quot;lo&quot;        \#=&gt; &quot;heo&quot;
   &quot;hello&quot;\.delete &quot;lo&quot;            \#=&gt; &quot;he&quot;
   &quot;hello&quot;\.delete &quot;aeiou&quot;, &quot;^e&quot;   \#=&gt; &quot;hell&quot;
   &quot;hello&quot;\.delete &quot;ej\-m&quot;          \#=&gt; &quot;ho&quot;

What does this mean?
I can't understand for the rules.

ah~ thanks, I got it.
never saw this syntax in my other languages of programming, :slight_smile:

···

2009/11/24 Jesús Gabriel y Galán <jgabrielygalan@gmail.com>:

On Tue, Nov 24, 2009 at 2:41 PM, Ruby Newbee <rubynewbee@gmail.com> wrote:

Returns a copy of \_str\_ with all characters in the intersection of
its arguments deleted\. Uses the same rules for building the set of
characters as \+String\#count\+\.

   &quot;hello&quot;\.delete &quot;l&quot;,&quot;lo&quot;        \#=&gt; &quot;heo&quot;
   &quot;hello&quot;\.delete &quot;lo&quot;            \#=&gt; &quot;he&quot;
   &quot;hello&quot;\.delete &quot;aeiou&quot;, &quot;^e&quot;   \#=&gt; &quot;hell&quot;
   &quot;hello&quot;\.delete &quot;ej\-m&quot;          \#=&gt; &quot;ho&quot;

What does this mean?
I can't understand for the rules.

What it means is that it builds a character set performing the
intersection of all arguments to the method. So if you do
s.delete("h", "he") the intersection of the arguments is "h", because
it's the only one present in all arguments. If the arguments don't
intersect nothing is deleted:

irb(main):001:0> "hello".delete "h", "e"
=> "hello"

The other part of the explanation means that as the documentation for
String#count says
(class String - RDoc Documentation):

"Any other_str that starts with a caret (^) is negated. The sequence
c1—c2 means all characters between c1 and c2. "

This means that s.delete("^aeiou") will remove all consonants and
leave the vocals, and that s.delete("a-m") will delete all characters
between "a" and "m":

irb(main):002:0> "hello".delete "a-m"
=> "o"
irb(main):003:0> "hello".delete "^aeiou"
=> "eo"
irb(main):004:0>

Hope this helps,

Jesus.

"^" for negating and "-" for character ranges are usual syntax of
regular expressions.

Jesus.

···

On Wed, Nov 25, 2009 at 1:24 AM, Ruby Newbee <rubynewbee@gmail.com> wrote:

ah~ thanks, I got it.
never saw this syntax in my other languages of programming, :slight_smile: