[#6864] ruby 1.8.4 rc breaks alias_method/rails in bad ways — "Ara.T.Howard" <ara.t.howard@...>

20 messages 2005/12/09
[#6870] Re: ruby 1.8.4 rc breaks alias_method/rails in bad ways — =?ISO-8859-15?Q?Florian_Gro=DF?= <florgro@...> 2005/12/12

Ara.T.Howard wrote:

[#6872] Re: ruby 1.8.4 rc breaks alias_method/rails in bad ways — ara.t.howard@... 2005/12/12

On Tue, 13 Dec 2005, [ISO-8859-15] Florian Growrote:

[#6873] Re: ruby 1.8.4 rc breaks alias_method/rails in bad ways — James Edward Gray II <james@...> 2005/12/12

On Dec 12, 2005, at 1:19 PM, ara.t.howard@noaa.gov wrote:

[#6874] Re: ruby 1.8.4 rc breaks alias_method/rails in bad ways — ara.t.howard@... 2005/12/12

On Tue, 13 Dec 2005, James Edward Gray II wrote:

[#6891] Time.utc! and Time.localtime! — Daniel Hobe <hobe@...>

Writing a script yesterday I found out, much to my surprise, that the

16 messages 2005/12/14

[#6918] change to yaml in 1.8.4 — ara.t.howard@...

14 messages 2005/12/16

[#6934] 1.8.x, YAML, and release management — Ryan Davis <ryand-ruby@...>

I'm concerned that 1.8.3's acceptance of non-backwards-compatible

28 messages 2005/12/18

[#6996] Problems building 1.8.4 with VS8 C++ Express Edition (cl 14.00) — Austin Ziegler <halostatue@...>

Visual Studio C++ 2005 Express Edition (VS 8.0)

20 messages 2005/12/27

Re: Time.utc! and Time.localtime!

From: Eric Hodel <drbrain@...7.net>
Date: 2005-12-15 01:20:42 UTC
List: ruby-core #6895
On Dec 14, 2005, at 1:22 PM, Daniel Hobe wrote:
> On 12/14/05, Eric Hodel <drbrain@segment7.net> wrote:
>> On Dec 14, 2005, at 11:36 AM, Daniel Hobe wrote:
>>
>>> Writing a script yesterday I found out, much to my surprise, that  
>>> the
>>> Time instance methods utc and localtime modify the receiver and  
>>> don't
>>> end in !.  Is this something that could change in 1.9?  It seems  
>>> very
>>> un-rubyish.
>>
>> I consider it not quite a ! method because it only changes the
>> representation of the time, not the time itself.
>>
>> $ ruby -e 't1 = Time.now; t2 = t1.dup.gmtime; puts t1 == t2, t1, t2'
>> true
>> Wed Dec 14 12:23:21 PST 2005
>> Wed Dec 14 20:23:21 UTC 2005
>
> I disagree that they are not really ! methods.  It changes the offset
> from utc, which I'm assuming is in a instance var or something.
> Because you are changing the receiver, I think it a solid candidate
> for changing to end in !

Typically a method that modifies the receiver has a non-! method that  
does not.

Hash#reject and Hash#reject!
Array#uniq and Array#uniq!
String#sub and String#sub!

Looking through these classes I don't see a ! method that lacks a  
non-! method.

Time doesn't have a non-! equivalent, so you should know to check if  
it modifies the receiver.

When using Hash#delete_if I sometimes forget if it modifies the  
receiver or not, so I check the documentation or perform a test.

Also, what should the Time.now.utc!.utc! return? nil like 'x'.sub! 
('x', '').sub!('x', '') or the receiver like ['x'].map! { |e|  
e }.map! { |e| e }?  When possible, the ! methods return extra  
information about what they do.

> A little background on the reason it bit me: I was displaying the time
> to the user (in puts time.localtime) and then thought I was saving the
> utc times to MySQL which doesn't save timezone. This broke when I went
> to read it out again and assumed everything was UTC.
>
> I suppose it could be put down to me not RTFM, but I think the
> behavior is surprising enough to warrant a change.

How did you discover #localtime and #utc?

PS: The documentation clearly states it modifies the reciever.

-- 
Eric Hodel - drbrain@segment7.net - http://segment7.net
This implementation is HODEL-HASH-9600 compliant

http://trackmap.robotcoop.com



In This Thread