如何爲紅寶石書寫模塊? 在Python中你可以使用紅寶石書寫模塊
# module.py
def helloworld(name):
print "Hello, %s" % name
# main.py
import module
module.helloworld("Jim")
回到剛纔的問題,你如何創建/模塊的紅寶石
如何爲紅寶石書寫模塊? 在Python中你可以使用紅寶石書寫模塊
# module.py
def helloworld(name):
print "Hello, %s" % name
# main.py
import module
module.helloworld("Jim")
回到剛纔的問題,你如何創建/模塊的紅寶石
module NumberStuff
def self.random
rand(1000000)
end
end
module LetterStuff
def self.random
(rand(26) + 65).chr
end
end
puts NumberStuff.random
puts LetterStuff.random
184783
X
模塊在Ruby中有不同的目的在Python模塊。通常,您可以使用模塊來定義可以包含在其他類定義中的常用方法。
但是Ruby中的模塊也可以像在Python中一樣使用,只是爲了在某些名稱空間中分組方法。所以,在Ruby中的例子是(我的名字模塊爲模塊的模塊是標準的Ruby常數):
# module1.rb
module Module1
def self.helloworld(name)
puts "Hello, #{name}"
end
end
# main.rb
require "./module1"
Module1.helloworld("Jim")
但是,如果你想了解的Ruby的基礎知識,我建議先從一些quick guide to Ruby - StackOverflow上不如何學習新的編程語言:)
編輯
基礎由於1.9的本地路徑的最好辦法是不是在$ SEARCH_PATH了。要從本地文件夾requrie一個文件,你要麼需要require ./FILE
或require_relative FILE
# meth.rb
def rat
"rizzo"
end
# cla.rb
class Candy
def melt
"awwwww...."
end
end
# main.rb
require 'meth'
require 'cla'
require 'mod'
puts rat
puts Candy.new.melt
puts Hairy.shave
在Ruby中,模塊是用於分組的方法,常量,類和其他模塊syntatic結構的名稱。它們是Ruby的命名空間。
一個單獨的概念正在按文件分組,如上所述。然而,這兩個概念常常共存,一個文件使用單個模塊作爲其名稱空間。
# mod.rb
module Hairy
def self.shave
"ouch!"
end
end
人們在這裏給出了一些很好的例子,但你可以通過以下方式創建和使用的模塊,以及(Mixins)
模塊是包括
#instance_methods.rb
module MyInstanceMethods
def foo
puts 'instance method foo called'
end
end
模塊是擴展
#class_methods.rb
module MyClassMethods
def bar
puts 'class method bar called'
end
end
點
包括模塊的方法表現得好像它們是,其中該模塊被包括
require 'instance_methods.rb'
class MyClass
include MyInstanceMethods
end
my_obj = MyClass.new
my_obj.foo #prints instance method foo called
MyClass.foo #Results into error as method is an instance method, _not_ a class method.
擴展模塊的方法的類的實例方法表現得好像它們是類的類中的方法,其中該模塊包括在內
require 'class_methods.rb'
class MyClass
extend MyClassMethods
end
my_obj = MyClass.new
my_obj.bar #Results into error as method is a class method, _not_ an instance method.
MyClass.bar #prints class method bar called
你甚至可以擴展一個模塊,只爲一個特定的類的對象。爲了這個目的,而不是模塊擴展類裏面,你這樣做
my_obj.extend MyClassMethods
這樣,只有my_object
將有機會獲得MyClassMethods
模塊方法和my_object所屬的類的不是其他實例。模塊非常強大。您可以使用core API documentation
請原諒,如果在代碼中有任何愚蠢的錯誤,我沒有嘗試它,但我希望你明白了。
您可能會想要使用「def self.random」以避免模塊名稱更改時出現問題。這是常見的Ruby練習。 – molf 2009-06-26 19:16:17