Robert Klemme
4/12/2009 10:33:00 AM
On 11.04.2009 20:43, Roger Pack wrote:
>>> 1) add an Object#in? method to complement the existing Array#include?
>> -0
>>
>> I don't see the benefit but I'm also not strongly against. I do see
>> Joel's point about the reversion. Basically it is strange that every
>> object should be able to answer a question that only the collection can
>> answer. Plus, you can easily add it yourself if you need it.
>
> I kind of agree with Joel on this one, too.
>
> A few other observations:
>
> re: in?
> Currently with #select you've got one in Kernel [which is IO.select] but
> Arrays seem to have their own #select. So it is "conceivably possible"
> to have a "default #in?" and have it overridden by Clutch#in? or
> House#in? if desired.
That's not exactly an override situation because the "global" select is
used without an instance or with a class instance (IO) while
Enumerable#select is always used with an instance.
> Another option would be included? -- might be more ruby-y :)
>
>>> 2) add some useful lists of exceptions, ex: IO.SELECT_EXCEPTIONS,
>>> IO.READ_EXCEPTIONS, so that you can rescue the wide gamut of them
>>> appropriately, should you desire to.
>> A good idea. But I do not know how feasible this is. Not all OS have
>> the same error reporting mechanisms and the mapping from OS errors to
>> exception types would have to be maintained of all platforms.
>
> True, mapping exceptions directly from OS to OS would be problematic.
> And knowing which ones are on each OS is also annoying.
> I am proposing more of a (platform dependent) container of all possible
> exceptions, regardless of what they may mean. Or have them all include
> a common ancestor--same result.
There is SystemCallError already:
ObjectSpace.each_object(Class) do |cl|
p cl if cl.ancestors.include? SystemCallError
end
>>> 3) provide an easier way to know which platform you're on than
>>> RUBY_PLATFORM =~ /mswin32|dgjpp|mingw/
>> -1
>>
>> This would make a Ruby specific unification of operating systems
>> necessary. This means that not only maintainers of automake need to
>> keep track of operating systems but also maintainers of Ruby. Other
>> difficulties are: how much level of detail do you provide? For one
>> application it may be enough to know it's running on Linux, the other
>> one needs to know the kernel version and a third one does not bother
>> about versions but must know the distro. I see too much effort for too
>> little benefit.
>
> True maintaining this is annoying, but I'd also propose that it's
> useful. Currently in 1.9 we have:
>>> RUBY_VERSION
> => "1.9.2"
>>> RUBY_PLATFORM
> => "x86_64-linux"
>>> RUBY_ENGINE
> => "ruby"
>
> Typically "enough" OS information is given in RUBY_PLATFORM to determine
> the platform--it's just "hard" to use that for such. My example being
> that knowing if you're on windows is something like RUBY_PLATFORM =~
> /dgjpp|mingw|mswin/
> which seems overly complex for me. And very hard to get right the first
> time (ex: RUBY_PLATFORM =~ /win/ doesn't work--that includes darwin).
And how do you want to resolve the issues I have raised in my posting?
The question really is "what is a platform"? When using cygwin, are you
"on Windows" or not? etc.
>>> 5) add a BigDecimal(float) method.
>>> -> BigDecimal.new("%f" % float)
>> 0
>>
>> Seems reasonable at first sight but the absence might have a reason.
>> For example, by making the conversion to String explicit it is more
>> obvious that float and BigDecimal are not really compatible.
>
> Yeah I wonder that myself. I was just hoping to make it easier to use
> BigDecimal, since Floats are so imprecise to use for decimal numbers :)
Which is exactly the reason why conversion to a BigDecimal should not be
too easy. String with decimal encoded number as input format for a
BigDecimal is really the proper type as you can see from the name
"BigDecimal". :-)
>> if test ?d, "some dir"
>
> Could you explain that again? Not sure I do understand the idiom.
> Looks like bash?
[robert@ora01 ~]$ ruby19 -e 'puts "yeah!" if test ?d, "."'
yeah!
[robert@ora01 ~]$
Happy Easter!
robert