当前位置:  开发笔记 > 编程语言 > 正文

为Ruby编写模块

如何解决《为Ruby编写模块》经验,为你挑选了2个好方法。

你是如何为ruby编写一个模块的.在python中你可以使用

# module.py
def helloworld(name):
    print "Hello, %s" % name

# main.py
import module
module.helloworld("Jim")

回到问题如何在/为ruby创建模块



1> Raimonds Sim..:

Ruby中的模块与Python中的模块具有不同的用途.通常,您使用模块来定义可以包含在其他类定义中的常用方法.

但Ruby中的模块也可以像Python一样用于在某些命名空间中对方法进行分组.所以你在Ruby中的例子就是(我将模块命名为Module1,因为Module是标准的Ruby常量):

# module1.rb
module Module1
  def self.helloworld(name)
    puts "Hello, #{name}"
  end
end

# main.rb
require "./module1"
Module1.helloworld("Jim")

但是如果你想了解Ruby的基础知识,我建议先从Ruby的快速指南开始- StackOverflow不是学习新编程语言基础知识的最佳方法:)

编辑
从1.9开始,本地路径不再是$ SEARCH_PATH.要从本地文件夹中获取文件,您需要require ./FILErequire_relative FILE



2> Chirantan..:

人们在这里给出了一些很好的例子,但你也可以用以下方式创建和使用模块(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所属的类的其他实例.模块非常强大.您可以使用核心API文档了解它们

请原谅代码中是否有任何愚蠢的错误,我没试过,但我希望你明白这个想法.

推荐阅读
php
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有