From: rantingrick on
Hello,

I am having trouble understanding the difference between require and
include. Also i need to know how to import a certain function or class
into my current namespace.

Now before i go any further i should explain that i am a Python
programmer and i understand that whilst Ruby and Python share some
similarities there are major differences between the languages, and
that is what seems to have me stumped here.

In python we use the "import" statement to bring modules, functions,
whatever. And the import statement can function in many ways,
observe...

if i want to bring all the names from the math module into my current
namespace without the need to qualify the names i can say...(note:
dir() shows the current namespace!)
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> from math import *
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'acos',
'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil',
'copysign', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'factorial',
'floor', 'fmod', 'frexp', 'fsum', 'hypot', 'isinf', 'isnan', 'ldexp',
'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin',
'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
>>> hypot(3,4)
5.0

Now if i want to just use a certain function, class, constant, i can
call for just those specific names like...

>>> dir()
['__builtins__', '__doc__', '__name__', '__package__']
>>> from math import hypot, pi
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'hypot', 'pi']
>>> pi
3.1415926535897931
>>> hypot(3,4)
5.0
>>>

Now if i want to bring a reference to the module in and then qualify
every thing within the module by perpending the
"module_name.identifier" i can say...

>>> import math
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'math']
>>> math.hypot(3,4)
5.0

Ok, i know Ruby is different, so tell me how i do the same thing only
in Ruby terms. Specifically i need to bring in a function that resides
in a module in a different file. How do i do this?
From: Steve Howell on
On Mar 30, 8:03 am, rantingrick <rantingr...(a)gmail.com> wrote:
> Hello,
>
> I am having trouble understanding the difference between require and
> include. Also i need to know how to import a certain function or class
> into my current namespace.
>
> Now before i go any further i should explain that i am a Python
> programmer and i understand that whilst Ruby and Python share some
> similarities there are major differences between the languages,  and
> that is what seems to have me stumped here.
> [...]
>
> Ok, i know Ruby is different, so tell me how i do the same thing only
> in Ruby terms. Specifically i need to bring in a function that resides
> in a module in a different file. How do i do this?

I can relate to your situation, since I also come from a Python
background. It is probably good to read up on docs a bit, but you
might also find the following examples useful for experimentation.

I think the answer to your specific question is shown by the use of
Hello2::hello_world2() below. Note that it is hello2.rb that actually
"namespaces" the function (and makes it a public module function), not
the act of calling "require" itself. This is very different from
Python, of course.

::::::::::::::
foo.rb
::::::::::::::
# require without modules
require 'hello1'
hello_world1()

# require with modules in the
# other file (see hello2.rb)
require 'hello2'
Hello2::hello_world2()

# re-opening module
module Hello2
def goodbye()
puts 'goodbye'
end
module_function :goodbye
end
Hello2::goodbye()

# on-the-fly modules
hello3 = Module.new do
def hello_world3()
puts 'hello world 3'
end
module_function :hello_world3

def obj_method()
puts 'obj_method'
end
end

hello3::hello_world3()
obj = 'foo'
obj.extend(hello3)
obj.obj_method()


::::::::::::::
hello1.rb
::::::::::::::
def hello_world1
puts 'hello world 1'
end

::::::::::::::
hello2.rb
::::::::::::::
module Hello2
def hello_world2
puts 'hello world 2'
end
module_function :hello_world2
end
From: Javier Abaroa on
Hello,

Ruby is different of other languages as php. In php, "include" an
"require" put the content of a the file "called" into the "caller" file.

Ruby "require" statement is analogous to php statement and put the
content of "called" file into "caller". But ruby "include" statement is
for include one "module" that is in a "yet required file" into a class
of the actual file.

If you intend to make reference in a class of your actual script-file to
a module in other file, normally you have to make the following:

# called file - name hello.rb

module Called {
def Called.Hello() # Defines Function Hello of Module Called
puts "hello"
end
}

# caller file - name caller.rb

require "hello.rb"

class MyClass
}
include Called # Includes Module Called into MyClass
def MyHello()
Called.Hello() # Execute function Hello of Module "Called"
end
}

MyVar = MyClass.new() # Create a new MyClass Object
MyVar.MyHello() # Execute function MyHello for MyVar, calling the
function Called.Hello()



Javier Abaroa

rantingrick wrote:
> Hello,
>
> I am having trouble understanding the difference between require and
> include. Also i need to know how to import a certain function or class
> into my current namespace.
>
> Now before i go any further i should explain that i am a Python
> programmer and i understand that whilst Ruby and Python share some
> similarities there are major differences between the languages, and
> that is what seems to have me stumped here.
>
> In python we use the "import" statement to bring modules, functions,
> whatever. And the import statement can function in many ways,
> observe...
>
> if i want to bring all the names from the math module into my current
> namespace without the need to qualify the names i can say...(note:
> dir() shows the current namespace!)
>>>> dir()
> ['__builtins__', '__doc__', '__name__', '__package__']
>>>> from math import *
>>>> dir()
> ['__builtins__', '__doc__', '__name__', '__package__', 'acos',
> 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil',
> 'copysign', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'factorial',
> 'floor', 'fmod', 'frexp', 'fsum', 'hypot', 'isinf', 'isnan', 'ldexp',
> 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin',
> 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
>>>> hypot(3,4)
> 5.0
>
> Now if i want to just use a certain function, class, constant, i can
> call for just those specific names like...
>
>>>> dir()
> ['__builtins__', '__doc__', '__name__', '__package__']
>>>> from math import hypot, pi
>>>> dir()
> ['__builtins__', '__doc__', '__name__', '__package__', 'hypot', 'pi']
>>>> pi
> 3.1415926535897931
>>>> hypot(3,4)
> 5.0
>>>>
>
> Now if i want to bring a reference to the module in and then qualify
> every thing within the module by perpending the
> "module_name.identifier" i can say...
>
>>>> import math
>>>> dir()
> ['__builtins__', '__doc__', '__name__', '__package__', 'math']
>>>> math.hypot(3,4)
> 5.0
>
> Ok, i know Ruby is different, so tell me how i do the same thing only
> in Ruby terms. Specifically i need to bring in a function that resides
> in a module in a different file. How do i do this?

--
Posted via http://www.ruby-forum.com/.

From: jbw on
On Tue, Mar 30, 2010 at 4:05 PM, rantingrick <rantingrick(a)gmail.com> wrote:
> Hello,
>
> I am having trouble understanding the difference between require and
> include. Also i need to know how to import a certain function or class
> into my current namespace.

http://ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html
This might clear things up, but to summarise include adds methods,
require adds modules.


> Now before i go any further i should explain that i am a Python
> programmer and i understand that whilst Ruby and Python share some
> similarities there are major differences between the languages,  and
> that is what seems to have me stumped here.
>
> In python we use the "import" statement to bring modules,  functions,
> whatever. And the import statement can function in many ways,
> observe...
>
> if i want to bring all the names from the math module into my current
> namespace without the need to qualify the names i can say...(note:
> dir() shows the current namespace!)
>>>> dir()
> ['__builtins__', '__doc__', '__name__', '__package__']
>>>> from math import *
>>>> dir()
> ['__builtins__', '__doc__', '__name__', '__package__', 'acos',
> 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil',
> 'copysign', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'factorial',
> 'floor', 'fmod', 'frexp', 'fsum', 'hypot', 'isinf', 'isnan', 'ldexp',
> 'log', 'log10', 'log1p', 'modf', 'pi', 'pow', 'radians', 'sin',
> 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']
>>>> hypot(3,4)
> 5.0
>
> Now if i want to just use a certain function, class, constant, i can
> call for just those specific names like...

Not sure there is a clean way to do this.

>>>> dir()
> ['__builtins__', '__doc__', '__name__', '__package__']
>>>> from math import hypot, pi
>>>> dir()
> ['__builtins__', '__doc__', '__name__', '__package__', 'hypot', 'pi']
>>>> pi
> 3.1415926535897931
>>>> hypot(3,4)
> 5.0
>>>>
>
> Now if i want to bring a reference to the module in and then qualify
> every thing within the module by perpending the
> "module_name.identifier" i can say...
>
>>>> import math
>>>> dir()
> ['__builtins__', '__doc__', '__name__', '__package__', 'math']
>>>> math.hypot(3,4)
> 5.0
>
> Ok, i know Ruby is different, so tell me how i do the same thing only
> in Ruby terms. Specifically i need to bring in a function that resides
> in a module in a different file. How do i do this?
>
>

From: rantingrick on
On Mar 30, 10:40 am, Steve Howell <showel...(a)yahoo.com> wrote:
(..snip..)

Thanks Steve that did it. I just used 'require "pathtofile"' and
called 'module::function()' and voila!

Thanks everyone the responses, i learned a great deal from all of them!