• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Ruby的module(模块)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
定义模块用module...end 。模块与类非常相似,但是:
    模块不可以有实例对象;
    模块不可以有子类。
#Module(模块)
module Module1
  def sqrt(num, rx=1, e=1e-10)
    num*=1.0
    (num - rx*rx).abs <e ? rx : sqrt(num, (num/rx + rx)/2, e)
  end
end

puts "Module demo:"
include Module1
puts sqrt(45670.01#21.3541565188558
#Module(模块)方法;模块方法提供了一个途径,在模块的外部访问模块内部方法,无须 include 模块。定义模块常量不需要如此。
module Module2
  def Module2.sayHello(*num)
    "Welcome to Ruby world."
  end
  PI=3.14
end
puts "Module method:"
puts Module2.sayHello
puts Module2::PI #3.14
puts Math::PI #3.141592653589793
#模块的第三个作用:实现了类似多重继承的功能
puts "multiple inheritance:"
class Person
  def talk
    puts "I'm talking."
  end
  #通过"include 模块名 " ,一个类可以得到某个模块的常量和方法,这里为了演示多继承,我们把其放到子类
  #include Module1

end
=begin
  person=Person.new
  person.talk   # I'm talking.
  puts person.sqrt(20.7,3.3# 4.54972526643248
=end
class Student < Person
  #通过"include 模块名 " ,一个类可以得到某个模块的常量和方法
  include Module1
end

aStudent=Student.new
aStudent.talk # I'm talking.
puts aStudent.sqrt(20.7,3.3# 4.54972526643248
#extend:给特定对象实例添加Module
class StudentEx 
end
stuEx=StudentEx.new

stuEx.extend(Module1)
puts stuEx.sqrt(20.7,3.3# 4.54972526643248

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
erlang和ruby互相调用发布时间:2022-07-14
下一篇:
解决redisrequiresrubyversion2.3.0[转载]解决redisrequiresrubyversion2.3.0发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap