ruby学习笔记

1.类与对象

1.1 类中的变量

ruby类中的属性全是私有的,不能用private/public/protect来修饰,即便是静态属性也是私有的。外界必须通过类中的方法来访问。
关于实例变(@开头)与局部变量(小写字母与下划线开通)
(1)局部变量的地位相当于java中的普通局部变量
(2)实例变量@不需要声明,这也是ruby的精髓。有时候一个ruby类里面没有定义任何属性,原因就是全都用了实例变量
具体的差异如下面代码所示

class Test
  def setdog(i)
    @dog=i #实例变量,无需在类中声明
  end
  def getdog
    return @dog
  end
  def setcat(i)
    cat=i #局部变量,没有在类中声明,它只属于这个函数
  end
  def getcat
    return cat
  end
end
test=Test.new
test.setdog("mydog")
test.setcat("mycat")
puts test.getdog  #正常输出
#puts test.getcat #报错

1.2在类中定义属性

1.2.1普通属性

在ruby中定义一个类的属性有两种方法,一种是通过实例变量(@开通)(不用声明,直接用,如上一节中代码所示),另一种则是通过attr

class Test
  attr :vreadonly1 # 只可读
  attr_reader :vreadonly2 #只可读
  attr_writer :vwrite #可写但不可读
  attr_accessor :read_write #可读可写
end
attr :vreadonly1

这行代码,其实是创建了两个方法,Test.vreadonly1 方法和vreadonly1= 方法,这样便让人觉得vreadonly1是plulic

1.2.2静态属性

对于类中的静态属性(相当于java中的static),也有两种定义方法,
方法一:通过@@来定义

class Test
  @@monkey="Test类里的oldmonkey"  #只有静态变量可以在这样赋值,实例变量不能这样赋值
  def getmonkey
    return @@monkey
  end
  def setmonkey(m)
    @@monkey=m
  end
end
test1=Test.new
test2=Test.new
#puts test.getcat #报错
puts test2.getmonkey
test1.setmonkey("Test类里的newmonkey")
puts test2.getmonkey

输出结果:

Test类里的oldmonkey
Test类里的newmonkey

方法二:用cattr来定义,但使用cattr之前需要引入require 'active_support/all'
如下面代码所示

require 'active_support/all'
class Test
  cattr_accessor :mystatic #可读可写的静态属性
end

Test.mystatic =4
puts Test.mystatic
test=Test.new
puts test.mystatic #在一个对象中也可以调用静态成员,
                   #因为用cattr_accessor修饰时已经对其进行了封装
                   #其实是定义了mystatic和mystatic=两个方法
1.2.3静态属性可以在声明时赋默认值,实例属性不可以
class Test
  @cat="实例cat"
  @@dog="静态dog"
  def getcat
    return @cat
  end
  def getdog
    return @@dog
  end
end
puts "输出结果--"
puts Test.new.getcat
puts Test.new.getdog

输出结果:

输出结果--

静态dog

1.3类中的方法

构造函数:

class Test
  def initialize
    puts "hello!!"
  end
end
Test.new

会输出hello!!

1.2.1public,private,protect
与变量不同,ruby类中的方法默认是公有的,可以用public,private,protect来修饰
1.2.2 静态方法与单例方法
参考了别人的博客https://www.cnblogs.com/yjmyzz/archive/2010/02/19/1669477.html

静态方法

#静态方法的4种写法
class Test
  def Test.StaticMethod1
    puts "Test.StaticMethod1"
  end

  def self.StaticMethod2
    puts "Test.StaticMethod2"
  end

  class << Test
    def StaticMethod3
      puts "Test.StaticMethod3"
    end
  end

  class << self
    def StaticMethod4
      puts "Test.StaticMethod4"
    end
  end
end

Test.StaticMethod1
Test.StaticMethod2
Test.StaticMethod3
Test.StaticMethod4

单例方法

#单例方法的2种写法

class Test
  def method1
    puts "method1"
  end
end

t1 = Test.new

def t1.singleMethod1
  puts "t1.singleMethod1"
end

class << t1
  def singleMethod2
    puts "t1.singleMethod2"
  end
end

t2 = Test.new

t1.method1
t2.method1
t1.singleMethod1
t1.singleMethod2
#t2.singleMethod1 #将报错
#t2.singleMethod2 #将报错

1.4 ::与.

::可以既可以用来获取方法,又可以用来获取变量
.只可以用来获取变量

2.块

感觉这个介绍很耐人寻味,记录下来:
最后再看一个使用块的例子。我们看一下代码清单 4.4 中的一个测试用例:
test “should get home” do
get static_pages_home_url
assert_response :success
assert_select “title”, “Ruby on Rails Tutorial Sample App”
end
现在不需要理解细节(其实我也不懂),从 do 关键字可以看出,测试的主体其实就是个块。 test 方法的参
数是一个字符串(测试的描述)和一个块,运行测试组件时会执行块中的内容。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值