Hi,
is there a way to convert a string to a range??
“(1…2)” ==> (1…2) ??
Another question, what’s the translation of infinite in ruby??
thanks
I tried to monkey patch the Range class, but it doesn’t seem to work,
so I patched the String class:
class String
def to_range
case self.count(’.’)
when 2
elements = self.split(’…’)
return Range.new(elements[0].to_i, elements[1].to_i)
when 3
elements = self.split(’…’)
return Range.new(elements[0].to_i, elements[1].to_i-1)
else
raise ArgumentError.new(“Couldn’t convert to Range:
#{str}”)
end
end
end
p “1…2”.to_range
p “1…2”.to_range
p “1.2”.to_range
output:
1…2
1…1
rng.test:11:in to_range': undefined local variable or methodstr’
for “1.2”:String (NameError)
from rng.test:18
On Feb 8, 2008 3:36 AM, Abir B. [email protected] wrote:
Another question, what’s the translation of infinite in ruby??
thanks
irb(main):001:0> 0 / 0.0
=> NaN
irb(main):002:0> 42 / 0.0
=> Infinity
irb(main):003:0> -42 / 0.0
=> -Infinity
You can also use the #nan? and #infinity? methods. AFAIK, this works
only with Floats and BigDecimals.
hth,
Todd
thanks a lot
I’ll try it… 
Thomas W. wrote:
I tried to monkey patch the Range class, but it doesn’t seem to work,
so I patched the String class:
I am not sure what the rules for the request should be, but
p “(1…2)”.to_range # 0…2 original request
p “1.2 - 7.2 + 3”.to_range # 1…0
p ‘“a”…“c”’.to_range # 0…0
all produce things I wouldn’t want.
I see Justin C. got in the eval suggestion before I
finished looking at it. I note that
eval(“1…7”)
causes a syntax mistake. Is there a way to handle syntax
problems parallel to execution errors?
Ian
Abir B. wrote:
Hi,
is there a way to convert a string to a range??
“(1…2)” ==> (1…2) ??
Another question, what’s the translation of infinite in ruby??
thanks
Not recommended, but eval is always an option:
irb(main):001:0> r = eval("(1…2)")
=> 1…2
irb(main):002:0> r.class
=> Range
irb(main):003:0> r.to_a
=> [1, 2]
-Justin
Ian W. wrote:
p “1.2 - 7.2 + 3”.to_range # 1…0
problems parallel to execution errors?Ian
This is a pretty strange way to go about it, but it will work even in
the presence of errors:
require ‘thwait’
def make_range(str)
r = nil
thr = Thread.new do
$SAFE = 4
begin
r = eval(str)
rescue
end
end
ThreadsWait.new(thr).all_waits
r.is_a?(Range) ? r : nil
end
p make_range(“1…7”) # nil
p make_range("(1…2)") # 1…2
p make_range(“1.2 - 7.2 + 3”) # nil
p make_range(’“a”…“c”’) # “a”…“c”
p make_range(“exit!”) # nil
p make_range(“load ‘evilfile.rb’”) # nil
For some reason, trying to use Thread.join will prevent the exception
handling from working.
-Justin