[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Seeking advice on some method names

Gavin Sinclair

11/29/2004 2:31:00 AM

Hi all,

I'm preparing some methods for 'extensions' [1] and would like some
people's opinions on method names.

Array#only
[5].only -> 5
[1,2,3].only -> exception

Class.get_class
Class.get_class("Test::Unit") -> Test::Unit
Class.get_class("not-a-class") -> exception

# Should 'get_class' be in Class or in Kernel?

Class#bare_name
Test::Unit.bare_name -> "Unit"

String#line_wrap
"the quick brown fox jumps ...".line_wrap(10)
-> "the quick
brown fox
jumps ..."

Thanks,
Gavin

[1] http://extensions.rub...



27 Answers

Its Me

11/29/2004 2:56:00 AM

0

> Array#only
> [5].only -> 5
> [1,2,3].only -> exception

I prefer: Array#one
to be complemented by
Array#one? #{|e| predicate(e)} true if exactly one match

and rounded out by
Array#any #=> return a random element, like Array#any?
Array#none # with addition of Array#none? {|e| predicate(e)}
Array#all #=> of questionable value

and separately
Array#include_all? (other_enumerable)


James Britt

11/29/2004 3:06:00 AM

0

Gavin Sinclair wrote:
> Hi all,
>
> I'm preparing some methods for 'extensions' [1] and would like some
> people's opinions on method names.
>
> Array#only
> [5].only -> 5
> [1,2,3].only -> exception
>
>

What is 'only' supposed to do?


James


Gavin Sinclair

11/29/2004 3:59:00 AM

0

On Monday, November 29, 2004, 2:06:25 PM, James wrote:

> Gavin Sinclair wrote:
>> Hi all,
>>
>> I'm preparing some methods for 'extensions' [1] and would like some
>> people's opinions on method names.
>>
>> Array#only
>> [5].only -> 5
>> [1,2,3].only -> exception
>>
>>

> What is 'only' supposed to do?

Return the _only_ element in an array. If there's not exactly one,
then "only" doesn't make sense, so an exception is raised. (At the
moment, the exception is RangeError, but I need to think about that.)

Gavin




Gavin Sinclair

11/29/2004 4:05:00 AM

0

On Monday, November 29, 2004, 1:57:50 PM, itsme213 wrote:

>> Array#only
>> [5].only -> 5
>> [1,2,3].only -> exception

> I prefer: Array#one
> to be complemented by
> Array#one? #{|e| predicate(e)} true if exactly one match

> and rounded out by
Array#any #=>> return a random element, like Array#any?
> Array#none # with addition of Array#none? {|e| predicate(e)}
Array#all #=>> of questionable value

> and separately
> Array#include_all? (other_enumerable)

#any? and #all? are methods of Enumerable, not Array. I like the idea
of Enumerable#one? and Enumerable#none? to complement them.

But I don't think Enumerable#one? and Array#one are complementary;
they seem entirely different.

Likewise with Array#any: it's useful, but really has nothing to do
with #any? I'm implementing Array#rand, by the way.

Regarding Array#include_all?, you might want to look at Set.

Cheers,
Gavin



Sam Stephenson

11/29/2004 4:21:00 AM

0

On Mon, 29 Nov 2004 11:31:06 +0900, Gavin Sinclair
<gsinclair@soyabean.com.au> wrote:
> Class.get_class
> Class.get_class("Test::Unit") -> Test::Unit
> Class.get_class("not-a-class") -> exception
>
> # Should 'get_class' be in Class or in Kernel?

Why not String?
"Test::Unit".to_class # => Test::Unit

My justification: it's analogous to String#to_sym.

> Thanks,
> Gavin

Sam


dblack

11/29/2004 4:34:00 AM

0

Jamis Buck

11/29/2004 4:46:00 AM

0

David A. Black wrote:
> Hi --
>
> On Mon, 29 Nov 2004, Sam Stephenson wrote:
>
>
>>On Mon, 29 Nov 2004 11:31:06 +0900, Gavin Sinclair
>><gsinclair@soyabean.com.au> wrote:
>>
>>> Class.get_class
>>> Class.get_class("Test::Unit") -> Test::Unit
>>> Class.get_class("not-a-class") -> exception
>>>
>>> # Should 'get_class' be in Class or in Kernel?
>>
>>Why not String?
>> "Test::Unit".to_class # => Test::Unit
>>
>>My justification: it's analogous to String#to_sym.
>
>
> I'm not sure what either of these adds to const_get -- or, to put it
> another way, why there should be a special method to do (essentially)
> a const_get only for strings that represent class names.

Well, IIRC, const_get doesn't work with symbols that contain "::". In
other words, const_get( "Test::Unit" ) would fail--you'd have to do
const_get("Test").const_get("Unit"), which becomes cumbersome. I can
think of several instances in my Net::SSH and Net::SFTP stuff alone
where a standard #get_class method would have been useful (though far
from necessary).

- Jamis

--
Jamis Buck
jgb3@email.byu.edu
http://www.jamisbuck...


dblack

11/29/2004 4:54:00 AM

0

Sam Stephenson

11/29/2004 5:03:00 AM

0

On Mon, 29 Nov 2004 13:34:24 +0900, David A. Black <dblack@wobblini.net> wrote:
> Hi --
>
>
>
> On Mon, 29 Nov 2004, Sam Stephenson wrote:
>
> > On Mon, 29 Nov 2004 11:31:06 +0900, Gavin Sinclair
> > <gsinclair@soyabean.com.au> wrote:
> > > Class.get_class
> > > Class.get_class("Test::Unit") -> Test::Unit
> > > Class.get_class("not-a-class") -> exception
> > >
> > > # Should 'get_class' be in Class or in Kernel?
> >
> > Why not String?
> > "Test::Unit".to_class # => Test::Unit
> >
> > My justification: it's analogous to String#to_sym.
>
> I'm not sure what either of these adds to const_get

AFAIK, const_get doesn't handle objects below its namespace, so you
can't const_get 'Foo::Bar', you have to Foo.const_get 'Bar'.

> -- or, to put it
> another way, why there should be a special method to do (essentially)
> a const_get only for strings that represent class names.

I agree. Maybe String#to_const would be more appropriate?

> David
>
> --
> David A. Black
> dblack@wobblini.net

Sam


Jim Weirich

11/29/2004 5:10:00 AM

0

> On Mon, 29 Nov 2004, Sam Stephenson wrote:
> > Why not String?
> > "Test::Unit".to_class # => Test::Unit

On Sunday 28 November 2004 11:34 pm, David A. Black wrote:
> I'm not sure what either of these adds to const_get -- or, to put it
> another way, why there should be a special method to do (essentially)
> a const_get only for strings that represent class names.

Why? Because it is a common function that is easy to do wrong. The quick and
obvious choices (eval(string) and Object.const_get(string)) are flawed. And
the one-liner that does it correctly ...

string.split("::").inject(Object) { |ns, n| ns.const_get(n) }

... is hardly transparent.

It is a common enough activity that having a standard and canonical way of
converting strings to classes would ease a number of tasks (e.g. anytime you
wish to specify a class in a config file, input stream or data base).

--
-- Jim Weirich jim@weirichhouse.org http://onest...
-----------------------------------------------------------------
"Beware of bugs in the above code; I have only proved it correct,
not tried it." -- Donald Knuth (in a memo to Peter van Emde Boas)