[#72642] Advantages of Symbols over constants — Marek Janukowicz <childNOSPAM@...17.ds.pwr.wroc.pl>

11 messages 2003/06/01

[#72732] case of sub! not working — Ian Macdonald <ian@...>

Hi,

27 messages 2003/06/03
[#72734] Re: case of sub! not working — Joel VanderWerf <vjoel@...> 2003/06/03

Ian Macdonald wrote:

[#72744] Re: case of sub! not working — Ian Macdonald <ian@...> 2003/06/03

On Tue 03 Jun 2003 at 10:21:43 +0900, Joel VanderWerf wrote:

[#72769] Re: case of sub! not working — Michael Campbell <michael_s_campbell@...> 2003/06/03

[#72907] Syck 0.35 + YAML.rb 0.60 -- the 1st stable release — why the lucky stiff <ruby-talk@...>

Pleased to announce:

18 messages 2003/06/05
[#75182] Re: Syck 0.35 + YAML.rb 0.60 -- the 1st stable release — Richard Zidlicky <rz@...68k.org> 2003/07/04

On Fri, Jun 06, 2003 at 06:15:58AM +0900, why the lucky stiff wrote:

[#72908] Problem with "require" stmt in "test-first " tutorial — RLMuller@... (Richard)

Hi All,

27 messages 2003/06/05

[#72940] VAPOR 0.06, Transparent Persistence to PostgreSQL — "Oliver M. Bolzer" <oliver@...>

Hi!

22 messages 2003/06/06

[#72975] join block — "Simon Strandgaard" <0bz63fz3m1qt3001@...>

29 messages 2003/06/06

[#72986] multiple blocks or proc arguments to method — itsme213@... (you CAN teach an old dog ...)

I was trying to write a collect_if method:

11 messages 2003/06/07

[#73081] requiring standard libs with save level 1 — Eugene Scripnik <Eugene.Scripnik@...>

I've set up new version of Ruby from CVS and my programs failed to work.

13 messages 2003/06/09
[#73114] Re: requiring standard libs with save level 1 — matz@... (Yukihiro Matsumoto) 2003/06/09

Hi,

[#73134] tcltklib does not get compiled. — John Fletcher <J.P.Fletcher@...>

I have installed ruby 1.6.7 on two computers using Red Hat 8.0 Linux.

14 messages 2003/06/10

[#73148] OT: Regexp question — Dominik Werder <dwerder@...>

Hi all,

25 messages 2003/06/10

[#73215] Rubyx (provisionally named) linux distro. Made by and run by Ruby — Andrew Walrond <andrew@...>

I have developed a little script which creates a simple linux distro

38 messages 2003/06/11

[#73260] Multiple Initialize methods? — "Nick" <nick.robinson@...>

Hi,

21 messages 2003/06/11

[#73283] Ruby advantages over Perl — Marek Janukowicz <childNOSPAM@...17.ds.pwr.wroc.pl>

68 messages 2003/06/11
[#73374] Re: Ruby advantages over Perl — Jason Creighton <androflux@...> 2003/06/12

On Thu, 12 Jun 2003 17:56:02 +0900

[#73356] does each work on a copy? — Rasputin <rasputin@...>

17 messages 2003/06/12

[#73372] Reason for implicit block syntax ? — itsme213@... (you CAN teach an old dog ...)

What is the reason for the implicit block in Ruby invocations?

13 messages 2003/06/12

[#73463] Hispeed String concat — Dominik Werder <dwerder@...>

What is the fastest way to add many small Strings to a big buffer?

17 messages 2003/06/13

[#73503] RaaInstallInRuby petition — ptkwt@...1.aracnet.com (Phil Tomson)

18 messages 2003/06/13

[#73555] I need a code beautifier or formatter — joaopedrosa@... (Joao Pedrosa)

Hello,

13 messages 2003/06/14

[#73600] Get songtitle from Winamp — calvin8@... (Andi Scharfstein)

Hi,

26 messages 2003/06/15
[#73601] Re: Get songtitle from Winamp — Daniel Carrera <dcarrera@...> 2003/06/15

-----BEGIN PGP SIGNED MESSAGE-----

[#73602] Re: Get songtitle from Winamp — Chad Fowler <chadfowler@...> 2003/06/15

It's a Win32API convention meaning "Window Handle".

[#73603] Re: Get songtitle from Winamp — Daniel Carrera <dcarrera@...> 2003/06/15

-----BEGIN PGP SIGNED MESSAGE-----

[#73605] Re: Get songtitle from Winamp — Wesley J Landaker <wjl@...> 2003/06/15

On Sunday 15 June 2003 9:34 am, Daniel Carrera wrote:

[#73609] Re: Get songtitle from Winamp — Daniel Carrera <dcarrera@...> 2003/06/15

-----BEGIN PGP SIGNED MESSAGE-----

[#73640] Standardizing Installers — Tom Clarke <tom@...2i.com>

I was thinking about some of the issues raised involving ruby libraries

16 messages 2003/06/16

[#73663] /BEGIN/ .. /END/ file reading — Wild Karl-Heinz <kh.wild@...>

hello

15 messages 2003/06/16
[#73674] Re: /BEGIN/ .. /END/ file reading — "Robert Klemme" <bob.news@...> 2003/06/16

[#73677] Re: /BEGIN/ .. /END/ file reading — Michael Campbell <michael_s_campbell@...> 2003/06/16

> A range operator with a regexp works like a flip flop (bistable

[#73680] Multiline comments? — "Christoph Tapler" <christoph.tapler@...>

I'm new to Ruby and I'm wondering that there is no possibility to write

38 messages 2003/06/16

[#73781] editor / ide recommentation on Windows — itsme213@... (you CAN teach an old dog ...)

What editor / ide would you recommend for serious Ruby work on

20 messages 2003/06/17

[#73787] Array#push(empty array expanded) => no exception — "Simon Strandgaard" <0bz63fz3m1qt3001@...>

This strange behavier really surprised me..

13 messages 2003/06/17

[#73821] European Ruby Conference — "Hal E. Fulton" <hal9000@...>

I don't think I've mentioned this before, but I

15 messages 2003/06/17

[#73924] Re: TCP/IP protocol and Net::HTTP — "J.Hawkesworth" <J.Hawkesworth@...>

Works for me too.

13 messages 2003/06/19
[#73931] Re: TCP/IP protocol and Net::HTTP — Nigel Gilbert <n.gilbert@...> 2003/06/19

I am beginning to wonder if this problem arises from the MacOS X

[#73943] collect info about ruby-api — "Simon Strandgaard" <0bz63fz3m1qt3001@...>

I have long been longing for a good description of ruby C api.

35 messages 2003/06/19

[#74039] WxRuby status? — ptkwt@...1.aracnet.com (Phil Tomson)

14 messages 2003/06/20
[#74507] Re: WxRuby status? — Richard Kilmer <rich@...> 2003/06/26

Things are progressing great. Kevin Smith has taken the development

[#74070] How to test if a file exists? — Daniel Carrera <dcarrera@...>

-----BEGIN PGP SIGNED MESSAGE-----

12 messages 2003/06/21

[#74096] Exasperated with ruby/tk - anybody successfully using it? — "Richard Browne" <richb@...>

General question: Is ruby/tk still being maintained in 1.7/1.8 or is it

10 messages 2003/06/22

[#74104] String#decorate — martindemello@... (Martin DeMello)

When chaining methods, it'd be neat to have something that was passed

17 messages 2003/06/22

[#74156] Marshal bug? — Anders Borch <spam@...>

Hi!

15 messages 2003/06/23
[#74161] Re: Marshal bug? — Dave Thomas <dave@...> 2003/06/23

Anders Borch wrote:

[#74205] can't find appropriate regexp — "Patrick Zesar" <jonnypichler@...>

spamassassin blocked my previous post :-((((

17 messages 2003/06/23

[#74279] Ruby Developer's Guide - hurt book sale — dennis@... (Dennis Sutch)

Syngress Publishing is having a hurt book sale. Per Syngress

11 messages 2003/06/24

[#74379] protect parents from children — "Simon Strandgaard" <0bz63fz3m1qt3001@...>

I fell into these pitfalls yesterday.. that a child was modifying a parent!

27 messages 2003/06/25

[#74413] Ruby/Java integration through JNI: working implementation — Mauricio Fern疣dez <batsman.geo@...>

14 messages 2003/06/25
[#74436] Re: Ruby/Java integration through JNI: working implementation — D T <tran55555@...> 2003/06/25

Yet An other JRuby ?? :-)

[#74465] DBD for Oracle9i — Jim Cain <list@...>

Hi all. I was looking for a Ruby interface to 9i that would handle all

25 messages 2003/06/25

[#74478] RPM for 1.8.0 — John Carter <john.carter@...>

I would like to get / build a Mandrake 9.1 RPM for Ruby-1.8.0 Preview 3

17 messages 2003/06/26

[#74506] String#split(' ') and whitespace (perl user's surprise) — mike@... (Mike Stok)

I have to confess that I use a lot of Perl, and some of its idioms are

15 messages 2003/06/26

[#74573] Using & for arrays of objects — "Krishna Dole" <kpdole@...>

Hi,

39 messages 2003/06/27

[#74579] why can't I use $3somevar for global variable in ruby 1.8.0? — Donglai Gong <donglai@...>

Hi, I'm new to Ruby programming and I just upgraded from 1.6.8 to 1.8.0

10 messages 2003/06/27

[#74702] Slides from my talk are up on rubyhacker.com — "Hal E. Fulton" <hal9000@...>

I was pleased to attend the European Ruby Conference

25 messages 2003/06/29

[#74706] Help with UnboundMethod#bind error — gabriele renzi <surrender_it@...1.vip.lng.yahoo.com>

Hi gurus and nubys,

16 messages 2003/06/29
[#74708] Re: Help with UnboundMethod#bind error — nobu.nokada@... 2003/06/29

Hi,

[#74732] Re: Help with UnboundMethod#bind error — matz@... (Yukihiro Matsumoto) 2003/06/30

Hi,

[#74919] Re: Help with UnboundMethod#bind error — "Pit Capitain" <pit@...> 2003/07/02

On 30 Jun 2003 at 17:18, Yukihiro Matsumoto wrote:

[#74717] Re: Message catalogs (I18N) overnight hack... — "Hal E. Fulton" <hal9000@...>

----- Original Message -----

17 messages 2003/06/29

[#74747] Editor like Textpad on Linux? — Dominik Werder <dwerder@...>

Hello,

13 messages 2003/06/30

[#74768] dynamic object creation — Aryeh Friedman <aryeh@...>

If I have something like this:

15 messages 2003/06/30

Re: Standard type conversion mechanism

From: Josh_Neland@...
Date: 2003-06-24 21:44:46 UTC
List: ruby-talk #74332
Have you run into this problem before? Maybe an example of 'conversion
method explosion' can help?

I've never encountered the need to add many (if any) to_* methods besides
to_s for debugging purposes, and the need for many sounds almost like a
problem with too much casting/converting rather than a utility missing from
the language. 

How is your implementation of 'conversion.rb' different from defining each
classes' to_* methods in 'conversion.rb'?

But, it has gotten me thinking:

Assuming an A object (a) is being converted to a B object (b), like so:

#OPTION 1:
a.to_b

or

#OPTION 2:
B.new(a) # or appropriate factory method

When would one prefer using 1 to 2 (to_b)?

Unless you needed polymorphic behavior, the constructor seems like a common
idiom for exactly this purpose. The end result of the call is generating an
object of type B and the data about constructing a new B object is what goes
in B's constructors, right?

I guess it has to do with how many different classes will be converted to
type B, how many different classes A can be converted to and how comfortable
you are coupling A or B to the other.

Why don't we care about the coupling of all of our objects to String? Why
not add a constructor to String for each of our new objects? OBVIOUSLY this
would be a nightmare if only because we can't overload methods based on
parameter type, but is there a solid design principle that deals with this
at a higher level?

I feel like I'm missing a very obvious conclusion to this.

Thanks for listening,
Josh

I've got a sell order at 34 on my IQ

-----Original Message-----
From: Ryan Pavlik [mailto:rpav@nwlink.com] 
Sent: Tuesday, June 24, 2003 2:33 PM
To: ruby-talk@ruby-lang.org
Subject: Re: Standard type conversion mechanism

On Wed, 25 Jun 2003 00:27:40 +0900
John Platte <john.platte@nikaconsulting.com> wrote:

> Kent Beck's book Smalltalk Best Practice Patterns covers this topic. It 
> discusses two gotchas to the practice of adding conversion methods to 
> the source class:
> 
> * No limit to number of methods to be added -- the protocol tends to 
> grow and grow.
> 
> * It couples the source class to another class it wouldn't otherwise 
> have knowledge of.

These are two exact problems this design solves.  Having a separate
table means 1) No additional methods added to the class, and 2) Neither
class needs to know about the other.

> He says there should only be a conversion method when either the 1) 
> source and destination classes have the same protocol, or 2) there's 
> only one reasonable way to implement the conversion. His solution for 
> conversions when neither of these conditions are true is to add a 
> "Converter Constructor Method" on the destination class. So instead of 
> string.as(Date), you'd say Date.from_string(string). This keeps the 
> logic on Date, which is where it belongs.

This is a bit of a grey area.  I'd still tend toward the side which says
two types shouldn't have to know about each other.  Any parsers or the
like should be external to both, because otherwise, as above, the number
of parsers and methods in your class can grow without bound.


> As for the proposed code, what would a conversion table buy me? 
> Wouldn't it just create a third place to put code that knows about my 
> class? IMHO, the problem Ryan mentioned with NilClass#to_str not 
> existing should be resolved in accordance with the POLS, but a 
> conversion table smells like bad design to me. If I'm wrong, I'd like 
> to better understand the benefits of the conversion table proposal.

It _is_ a third place to put code.  It just so happens that this is
where the code belongs, due to both of the above problems.  Given types
A and B, there is no reason A or B necessarily know about each other, or
are even in the same package/module/etc.  They may be totally unrelated,
yet it may become desireable for one type to be converted to the other.

Thus you need a place for the "intermediary" or "glue" code to be
placed.  Should it go in A?  Or B?  It's best that it be in neither A
nor B, but in the middle somewhere.  That's what the ConversionTable is:
the middle.

In addition, you get further advantages, in that you can query whether
one type can be converted to another, you can make allowances for
the class hierarchy (allowing subtypes to be converted to other subtypes
when only supertype conversions are available), and you can have the
table figure out how to go from A -> D when only A -> B, B -> C, and
C -> D conversions exist.  (The current implementation doesn't handle
that yet, but it could be made to with a little work.  In fact, once it
figures out a conversion, it could write code and drop it in A -> D that
follows the process so it doesn't have to figure it out again.)

Further but more abstract discussion:

You always have a major advantage when things are programmatic and not
purely semantic/convention.  For instance, the method #to_s means
nothing to ruby, really, other than "a method called to_s".  Any further
meaning is purely convention... typically it converts to a string.

If you have actual programmatic meaning... "this is a ConversionTable,
it does this thing", then you gain the ability for your code to do more
work for you.  This is where the chain conversion mechanism comes in.
Instead of writing every conversion yourself (adding a method to every
class to go to every other class it needs), ruby can fill in the rest.

It also allows your code to do things like ask "what can this object be
treated as?"  Your code can pick the preferable form, or be satisfied
with a less-preferable form (but still be able to function).  For
instance, if you're printing a result, you may want a String, but you'll
be happy with an Integer, too.

This opens the door for further semantic processing of values... making
semantics "programmatic" themselves.  Adding metadata about what an
object _is_ ties right into the conversion system.  Tagging things with
semantics would deepen the conversion chaining greatly.  For instance,
you could have an Integer tagged as "Unix Time", and ask for an "ISO
Date" String.

The idea of well-defined semantics, along with context-sensitivity, is
an area I've been interested in... the ConversionTable is a (very)
simple beginning, but it's a fundamental piece of functionality that
solves the problems you've listed above in a fairly elegant manner (even
if my code isn't the most elegant implementation).


-- 
Ryan Pavlik <rpav@users.sf.net>

"And I'm 10,000 feet up in the air. Dang it." - 8BT



In This Thread

Prev Next