Method prototypes like C++? // Compiling executables

Discussion in 'Ruby' started by Claudio Freda, Feb 18, 2010.

  1. Hi, I'm switching from C++ to Ruby, I have a few questions.

    1. How come there isn't any "method prototype" feature like the function
    prototypes in C++? Like, in c++ I declared just the name of a funcion at
    the beginning of a block of code and then I could put the function
    anywhere in the program, so it could be called wherever, without
    worrying if it had been fully declared or not. Is this possible?

    2. I find it awesome that you needn't compile to view the results of
    your code; still, i would like to be able to compile my programs to an
    executable file for distribution. Is it possible?

    3. I still don't get how this whole "gems" thing work. In C++ I used to
    load libraries, it seems that in Ruby most of the libraries are loaded
    by themselves when needed. When exactly do I need to include other
    libraries?
    --
    Posted via http://www.ruby-forum.com/.
     
    Claudio Freda, Feb 18, 2010
    #1
    1. Advertising

  2. On Feb 18, 2010, at 8:50 AM, Claudio Freda wrote:

    > Hi, I'm switching from C++ to Ruby, I have a few questions.
    >
    > 1. How come there isn't any "method prototype" feature like the
    > function
    > prototypes in C++? Like, in c++ I declared just the name of a
    > funcion at
    > the beginning of a block of code and then I could put the function
    > anywhere in the program, so it could be called wherever, without
    > worrying if it had been fully declared or not. Is this possible?


    Sure just do it! Methods only need to exist when then are "called"
    and even then you can use the method_missing hook to define them on
    the fly if you need to.

    >
    > 2. I find it awesome that you needn't compile to view the results of
    > your code; still, i would like to be able to compile my programs to an
    > executable file for distribution. Is it possible?


    Look at JRuby's ability to create .class files for the JVM, but you
    might want to keep an open mind about whether you *really* need to
    compile.

    >
    > 3. I still don't get how this whole "gems" thing work. In C++ I used
    > to
    > load libraries, it seems that in Ruby most of the libraries are loaded
    > by themselves when needed. When exactly do I need to include other
    > libraries?


    It's a way to have multiple versions of libraries on your system.
    You'll know you need more because something doesn't exist. For
    example, there are some useful methods on Date that are only available
    if you "require 'date'" in your code. (Not the best example because
    that's not a gem, but a standard library, i.e., it comes as part of
    Ruby.)

    -Rob

    Rob Biedenharn http://agileconsultingllc.com
     
    Rob Biedenharn, Feb 18, 2010
    #2
    1. Advertising

  3. [Note: parts of this message were removed to make it a legal post.]

    how to unsubscribe from this mailing list can any one please reply me.

    thanks
    sandeep
     
    sandeep bupathi, Feb 18, 2010
    #3
  4. Rob Biedenharn wrote:
    > Sure just do it! Methods only need to exist when then are "called"
    > and even then you can use the method_missing hook to define them on
    > the fly if you need to.


    Wait, I explain my problem.
    In C++ I would have been able to to this:

    void function();
    function();
    void function() {
    cout<<"The function has been executed"
    }

    And it would still print "The function has been executed"

    In ruby instead if I do this:

    def method; end

    method

    def method
    print ('The method has been executed')
    end

    it just prints me nothing; I think it has something to do with ruby's
    dynamic definitions.

    Just how to achieve the same thing in ruby? (summoning a function that
    is declared later in the code)
    --
    Posted via http://www.ruby-forum.com/.
     
    Claudio Freda, Feb 18, 2010
    #4
  5. On Thu, Feb 18, 2010 at 6:28 PM, Claudio Freda <> wrot=
    e:
    > Rob Biedenharn wrote:
    >> Sure just do it! =A0Methods only need to exist when then are "called"
    >> and even then you can use the method_missing hook to define them on
    >> the fly if you need to.

    >
    > Wait, I explain my problem.
    > In C++ I would have been able to to this:
    >
    > void function();
    > function();
    > void function() {
    > =A0cout<<"The function has been executed"
    > }
    >
    > And it would still print "The function has been executed"
    >
    > In ruby instead if I do this:
    >
    > def method; end
    >
    > method
    >
    > def method
    > =A0print ('The method has been executed')
    > end
    >
    > it just prints me nothing; I think it has something to do with ruby's
    > dynamic definitions.
    >
    > Just how to achieve the same thing in ruby? (summoning a function that
    > is declared later in the code)


    What Rob wanted to say is that you don't need to declare a function
    (method). You just call it, and it has to have been defined before the
    call. But be aware that the code inside a method is not executed when
    it's parsed, only when the method is called, so you can have this:

    irb(main):001:0> def caller
    irb(main):002:1> method("a")
    irb(main):003:1> end
    =3D> nil
    irb(main):004:0> def method(s)
    irb(main):005:1> puts s
    irb(main):006:1> end
    =3D> nil
    irb(main):007:0> caller
    a

    You can have the definition of caller before the definition of method.
    What you can't do is call caller before defining method.

    Hope this clears up a bit,

    Jesus.
     
    Jesús Gabriel y Galán, Feb 18, 2010
    #5
  6. 2010/2/18 Claudio Freda <>:
    > Rob Biedenharn wrote:
    >> Sure just do it! =A0Methods only need to exist when then are "called"
    >> and even then you can use the method_missing hook to define them on
    >> the fly if you need to.

    >
    > Wait, I explain my problem.
    > In C++ I would have been able to to this:
    >
    > void function();
    > function();
    > void function() {
    > =A0cout<<"The function has been executed"
    > }
    >
    > And it would still print "The function has been executed"


    You need that in C / C++ only because implementations are split to
    header and source files. We don't do that in Ruby. Instead, we
    implement whatever functionality we need and place it in one or more
    rb files. Those are then read by using "require".

    > In ruby instead if I do this:
    >
    > def method; end
    >
    > method
    >
    > def method
    > =A0print ('The method has been executed')
    > end
    >
    > it just prints me nothing; I think it has something to do with ruby's
    > dynamic definitions.
    >
    > Just how to achieve the same thing in ruby? (summoning a function that
    > is declared later in the code)


    That's not a problem as long as execution starts later:

    def foo
    method
    end

    def method
    puts 'It works!'
    end

    foo

    This is typically the case if your required files contain declarations only=
     
    Robert Klemme, Feb 19, 2010
    #6
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Devyn

    Executables?

    Devyn, Apr 10, 2004, in forum: Perl
    Replies:
    3
    Views:
    583
    Jürgen Exner
    Apr 11, 2004
  2. Steve
    Replies:
    0
    Views:
    400
    Steve
    Jul 1, 2005
  3. lovecreatesbeauty

    Some complex function prototypes like signal()

    lovecreatesbeauty, Jan 28, 2005, in forum: C Programming
    Replies:
    2
    Views:
    679
    Jonathan Bartlett
    Jan 28, 2005
  4. Patrick Kowalzick
    Replies:
    5
    Views:
    500
    Patrick Kowalzick
    Mar 14, 2006
  5. gregarican

    Ruby/DL struct! method prototypes

    gregarican, Oct 13, 2005, in forum: Ruby
    Replies:
    1
    Views:
    137
    gregarican
    Oct 13, 2005
Loading...

Share This Page