Prev: Its a bird, its a plane, no ummm, its a Ruide
Next: SmartImage 0.0.2: a sane cross-platform image compositingand thumbnail library
From: rantingrick on 30 Mar 2010 11:03 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 30 Mar 2010 11:40 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 30 Mar 2010 11:42 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 30 Mar 2010 11:46 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 30 Mar 2010 12:10
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! |