Robert Klemme
4/8/2008 9:08:00 PM
On 08.04.2008 00:53, Phillip Gawlowski wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Avdi Grimm wrote:
> | On Mon, Apr 7, 2008 at 5:12 PM, Phillip Gawlowski
> | <cmdjackryan@googlemail.com> wrote:
> |> Ruby is?
> |>
> |> Doesn't look like it to me, since I can change the type of a variable
> |> with ease.
> |
> | You're confusing static typing and strong typing.
> |
> | In a weakly-typed language, like C, it is possible to cast an integer
> | as a, for instance, a char*, and then call string functions like
> | sprintf() on it and the compiler will compile it, the runtime will run
> | it, and it will wreak whatever havoc you please. Most high-level
> | languages are strongly-typed, these days - neither Java or Ruby will
> | allow you to call a String method on an Integer. You can assign
> | whatever object you want to a variable in Ruby - hence *dynamic*
> | typing - but that object will only ever allow you to call supported
> | methods on it; otherwise you'll get a NoMethodError. Hence *strong*
> | typing.
> |
>
> Thanks for the enlightenment. :)
Another way to put it would be that Ruby's variables are type-less,
while objects do have a specific type. While we're at it: type !=
class. Basically the type is defined by all operations (aka methods)
usable on an instance - not the class it was created from.
Kind regards
robert