Ruby notes

include VS extend VS require

  • require is like "include" in C language. Not mix in

  • include : mixes in specified module methods as instance methods in the target class
  • extend : mixes in specified module methods as class methods in the target class

So is the major difference just this or is a bigger dragon lurking? e.g.

module ReusableModule
  def module_method
    puts "Module Method: Hi there!"
  end
end

class ClassThatIncludes
  include ReusableModule
end
class ClassThatExtends
  extend ReusableModule
end

puts "Include"
ClassThatIncludes.new.module_method       # "Module Method: Hi there!"
puts "Extend"
ClassThatExtends.module_method            # "Module Method: Hi there!"

class a < b # a inherited b

@address: variables inside instance 实例变量
@@address: 类变量

实例变量;

1. 命名规则:以“@”开头;每个实例变量都是在第一次出现时动态加入对象;

2. 实例变量通常在方法中定义;

    当在方法中声明实例变量时,该实例变量事实上属于该方法所在的类,而不是该方法;

    虽然实例变量是属于类的,但大部分时候我们都是在该类的方法里定义实例变量;

3. Java在创建对象时一次为该对象的所有实例变量都分配了相应的内存空间;

  Ruby语言里的对象完全是动态的,创建对象时该对象没有任何实例变量,直到执行到为实例变量定义时,该对象才动态增加该实例变量;

4. 生存范围:与该类对象的生存范围相同,只要该类对象存在,则该对象里的实例变量将一直存在;

    但局部变量则会随着方法的消亡而消亡(除非使用闭包);

5. 实例变量的访问范围总是:private,即在类定义内对实例变量的赋值和读取没有限制;在类外访问实例变量时,则可以通过方法来访问;

6. 属性定义:1.用实例变量;2.用Module的方法(四个方法:attr,attr_reader,attr_writer,attr_accessor;示例:attr:color,true;);

7. 在模块中定义实例变量,目的是将该实例变量混入其他类中;(模块是无法创建实例的);

8. 类范围内定义的实例变量是Class对象的实例变量;

9. 实例变量永远都不能暴露为public,只能通过类方法(类名.方法名)暴露;

类变量;

1. 命名规则:以“@@”开头;从第一次开始赋值的地方开始生效;

2. 定义:可以在类、模块、方法的定义中定义类变量;(在方法中定义的变量只有在该方法被调用后,该类变量才会生效)

3. 访问:可以在类中的特殊方法、实例方法等处对类变量进行引用和赋值;

4. 类变量必须先定义,然后才可以使用,否则异常;

5. 类变量的特殊性:一个类、其子类、它们的实例:的同名类变量共享了同一块内存区域(都引用了同一个变量);

6. 可以在模块中定义类变量,所有混入该模块的类,共享该模块中定义的类变量;仍然共享内存区域;

7. 类变量与常量:

  *类变量可以重复赋值;常量重复赋值时发出警告(不是错误);

  *类变量默认是protected的,不能在类外部直接引用;(可在继承类中以用或赋值);

    类变量与实例变量:

  *在类范围内定义的类变量,可以在该类的方法中访问;而实例变量则不行;

  *类变量可在子类中引用或赋值,但实例变量可在类范围内直接引用或赋值;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值