[#406419] Recursion with Hash — Love U Ruby <lists@...>

h = {a: {b: {c: 23}}}

14 messages 2013/04/01

[#406465] Exclusively for Rubyists, a community on Facebook — "senthil k." <lists@...>

I was surprised to know that there is no community for Ruby Programming

12 messages 2013/04/03
[#406467] Re: Exclusively for Rubyists, a community on Facebook — Marc Heiler <lists@...> 2013/04/04

Thing is, some people do not use Facebook and never will.

[#406528] Role of bundler in creating and installing a gem — Jon Cairns <lists@...>

Hi fellow rubyists,

11 messages 2013/04/05

[#406555] How do you know what the main file in Ruby Projects is? — peteV <pete0verse@...>

Hi Ruby people,

18 messages 2013/04/05
[#406558] Re: How do you know what the main file in Ruby Projects is? — "Carlo E. Prelz" <fluido@...> 2013/04/05

Subject: How do you know what the main file in Ruby Projects is?

[#406560] Re: How do you know what the main file in Ruby Projects is? — Hans Mackowiak <lists@...> 2013/04/05

Carlo E. Prelz wrote in post #1104616:

[#406562] Re: How do you know what the main file in Ruby Projects is? — "D. Deryl Downey" <me@...> 2013/04/05

Actually its not wrong. What it does is explicitly state which ruby

[#406563] Re: How do you know what the main file in Ruby Projects is? — Matt Lawrence <matt@...> 2013/04/05

On Sat, 6 Apr 2013, D. Deryl Downey wrote:

[#406564] Re: How do you know what the main file in Ruby Projects is? — Hans Mackowiak <lists@...> 2013/04/05

Matt Lawrence wrote in post #1104625:

[#406566] Re: How do you know what the main file in Ruby Projects is? — Matt Lawrence <matt@...> 2013/04/05

On Sat, 6 Apr 2013, Hans Mackowiak wrote:

[#406570] Re: How do you know what the main file in Ruby Projects is? — Matthew Mongeau <halogenandtoast@...> 2013/04/05

I'm interested in the issue with using env, but I find you explanation a but=

[#406600] Mapping string data ptr to buffer in ffi — se gm <lists@...>

I'm trying to implement some "shared memory" in Ruby, but I'm not sure

20 messages 2013/04/08

[#406683] confusion with Struct class — Love U Ruby <lists@...>

I went to there - http://www.ruby-doc.org/core-2.0/Struct.html but the

29 messages 2013/04/11
[#406694] Re: confusion with Struct class — Love U Ruby <lists@...> 2013/04/11

Why does every time the has value getting changed,while the instance

[#406762] Why does #content method in nokogiri not printing the full text? — Love U Ruby <lists@...>

Here is the documentation: http://www.rubydoc.info/gems/nokogiri/frames

19 messages 2013/04/14
[#406764] Re: Why does #content method in nokogiri not printing the full text? — tamouse mailing lists <tamouse.lists@...> 2013/04/14

On Sun, Apr 14, 2013 at 11:19 AM, Love U Ruby <lists@ruby-forum.com> wrote:

[#406874] Input: sentence Modify: words Output: modified sentence — Philip Parker <lists@...>

I am new to Ruby. This is a programming interview question to use any

11 messages 2013/04/19

[#406912] Tap method : good or bad practice ? — Sébastien Durand <lists@...>

Hi all !

18 messages 2013/04/21

[#406936] BEGINNER -CLASS QUERY — shaik farooq <lists@...>

HEY as we know that the object conatins the instance variables that are

22 messages 2013/04/22

[#406966] copying files syntax with FileUtils.rb (grr.) — Thomas Luedeke <lists@...>

In my Ruby scripting, there is probably no greater and chronic source of

10 messages 2013/04/23

[#406969] what is the $- magic global? — Matthew Kerwin <lists@...>

I've been searching for the past hour or so, including manually stepping

13 messages 2013/04/24

[#407059] New Rexx like data structure — Peter Hickman <peterhickman386@...>

This is just something that I have been playing with for some time but I

11 messages 2013/04/29

[#407070] writing lines to a file — peteV <pete0verse@...>

I have a text file with on every line a magic card number and such info

13 messages 2013/04/29

Re: Match against multiple patterns problem

From: Matthew Kerwin <lists@...>
Date: 2013-04-19 03:08:35 UTC
List: ruby-talk #406863
Charles Hixson wrote in [#1106215]:
> The case expression might be a bit cleaner, but that would appear to
> coerce using the $~ pattern match value, which I don't like at all

$~ is the same object as your 'm', so you can do your `m[0]' thing with
it, or call `m.to_s' on it, or whatever you like to explicitly coerce
it.  I'll put some examples below.

> The current version is:
>  if  not s.is_a?(String) or s.length < 1 then return  ["1",""]
>  if  (m = /^[^\W_]+/.match(s) )  then  return  ["a", m[0]]
>  if  (m = /^\s+/.match(s) )      then  return  ["s", m[0]]
>  if  (m = /^[[:cntrl:]]+/)       then  return  ["c", m[0]]
>  if  (m = /^[[:punct:]_]+/)      then  return  ["p", m[0]]
>  if  (m = /^[^\w\s[:cntrl:][:punct:]]+/) != nil
>                                  then  return  ["r", m[0]]
> which looks a lot better.

Sure, except that it's syntactically invalid (missing all the 'end's)
and the final 3 if-statements assign the regexp (not the match data) to
m.  Hopefully this is just a copy-paste error; otherwise, decent unit
tests should catch it.

> Also, there would need to be a default case to handle uncovered
> options (which just prints an error message and returns ["2", ""].

Your original (and final) code missed that part.

If you want to not assign m in the condition, you could use $~.  Here's
a straight copy of your final code (with some fixes):

  if  !s.is_a?(String) or s.length < 1 then return ["1",""]; end
  if  /^[^\W_]+/.match(s)        then  return  ["a", $~[0]]; end
  if  /^\s+/.match(s)            then  return  ["s", $~[0]]; end
  if  /^[[:cntrl:]]+/.match(s)   then  return  ["c", $~[0]]; end
  if  /^[[:punct:]_]+/.match(s)  then  return  ["p", $~[0]]; end
  if  /^[^\w\s[:cntrl:][:punct:]]+/.match(s)
                                 then  return  ["r", $~[0]]; end
  puts "error message"
  ["2",""]

Or with a case statement:

  return ['1',''] unless s.is_a?(String) and !s.empty?
  case s
  when /^[^\W_]+/       ; ['a', $~[0]]
  when /^\s+/           ; ['s', $~[0]]
  when /^[[:cntrl:]]+/  ; ['c', $~[0]]
  when /^[[:punct:]_]+/ ; ['p', $~[0]]
  when /^[^\w\s[:cntrl:][:punct:]]+/
                          ['r', $~[0]]
  else  puts "error message"
                          ['2', '']
  end

Obviously you can arrange it however you like, I've just attempted to
match your layout style based on a guess.

Charles Hixson wrote in [#1106217]:
> Given that $1 means what I think it means from context, that would work,
> but I dislike the global variables with pattern matching.

The global assignment happens whether or not you like/use it.
Assertively not using the feature isn't a very strong way to express
your displeasure with it, and it won't just shrivel up and drop off lack
of use.  ;)

See also: https://bugs.ruby-lang.org/issues/8110

> But really my problem was being mislead by error messages about what the
> problem actually was.

That is the main thing.  As a tip, in future you should include the
error message in your post; possibly someone with more experience could 
help you find the root cause more quickly that way.

-- 
Posted via http://www.ruby-forum.com/.

In This Thread