前两天跟着书,开始自学RUBY和ROR,开始笔记之,开始感受小日本的ROR如何牛B法
安装ruby后看版本:ruby -v
安装rails:gem install rails 3.0.3
gem install rails --include-dependencies(记得cross gfw)
验证安装rails -v
2 手动编译
ruby d:\xxxx\xxx.rb
语法检查 ruby -c xxx.rb
打开警告 -w
执行字面脚本 ruby -e 'puts "hello"',单引号中的是语句,多个语句用分号
3 获得输入number1=gets将用户输入保存到number1变量中去
4 常量:全部大写;
局部变量:以小写字母或者下划线开头
全局变量:以$开头
5 RUBY中三大基本数据型:数值型,范围型,符号型
1)数值型
大于2的30次方为bignum;小于的为fixnum
2)范围型
a..b:定义的是从值a到b的范围,包括a,b,以及值a,值B中间的值
a...b:定义的是从值a到b的范围,包括a,b,以及值a,值B中间的值,不包括值b
有相关的方法:a=0..59
找最小: a.min
找最大:a,max,找最后一个值a.end,第一个a.first,判断是否有这个值
a.include?100(看范围a中是否有值100)
3)regect:将范围转为数组,并删除条满足条件元素
select:将该范围转为数组,只选择满足条件的
each:输出每个范围的每个元素
比如:count.reject(|i|i<15);
count=1..20;
count.each do|i|
puts i.to_s
end
4)符号对象 ,比如
abc="dddd";
ly=:abc
puts ly==:"abc" 测试ly是否等于字符串abc所对应的符号对象
输出为true
字符串和符号对象的转换:
dcy="abc"
ly=:"abc"
puts dcy.to_sym==ly
puts ly.to_s==dcy 都输出 true
也可以通过%s{dcy}来创建符号对象
6) 算术运算符
**乘方运算,比如2**3=8
7) <=>:比较两个对象,如果左边对象小于右边,返回-1;如果左边对象等于右边,返回0,如果左边对象大于右边,
范围1
8)表达式并行赋值
比如C,D="HI","HELLO"
交换的话
c,d=d,c
则C变为D,D变为C,如果任何一方的变量多于另外一方,则多余一方的设置为nul
嵌套赋值
test=["a","b","c","d"]
b,(c,d),e=test
则b="a" (c,d)="b" e="d" 而d=null
SHE=["a","b","c]
flh=['123","456","658","erer"]
S,H,*E=flh
则s=123,h=456,E=(658,erer)
又如a,(b,*c),d="S",["H","E"]
括号对括号的原则,则a=S,(b,*c)=[H,E],d=null,b=H,c=E
9) 注意,是if then
elsif ....
else
end
10) unless语句
unless 条件 then
代码块1
else
代码块2
end
当true时,执行else语句块代码,为false时,才执行then的代码
11)case xxxx
when xxxx
when xxxx
else
end
12) for..in语句
shujuaray=["xxx","xxx"...]
for shuju in shujinarray
put shuju
end
angle=("xxx"=>abc,"ddd"=>dfdff)
for key,value in angle do
put key+"指的是"+value
end
13) 迭代器
names=["xxx","xxxx","dfdf","xxcx]
names.each do |name|
puts name
end
14) NEXT,跳出本次循环
15)单引号,双引号都可以用来表示字符串,其区别为:如果是单引号的话,原样输出字符串中的东西,双引号的话
,如果字符串中有特殊字符,则进行真实的转义,比如
a="电风扇发射点\n大师傅似的\s....."
b='adadasdsd:\n....\s'
16) 字符串操作:
a<<b,将b串永久加到a串后
puts "#{a}#{b}"
重复次数:puts "#{a}#{b}"*3//重复连接3次
复制字符串:dup只复制字符串内容,clone复制字符串并继承其特殊方法
获取子字符串str="abcsdds",str[4,5]为获得字符串,字符串位置从0开始
17) 哈希:
person=Hash.new
person["name"]=xxxxx
18) 数组
FOOD=["XXX',"DDD","XXX"....]
food=Array.new
food[0]=xxxx food[1]=xxxxx
对包含特殊字符或者空格的字符串转为数组,比如
str=%W{ABC\S DSDSD\S SDSD\S\SDD}
str=%w{ABC\S DSDSD\S SDSD\S\SDD}
则%W 会 ABC DSDSD SDSD SDD
%w 会 ABC\S DSDSD\S SDSD\S\SDD
unshift():向数组头部添加数组元素
push():向尾部添加元素
<<向数组尾部添加一个数组元素
19 类型转换
to_s:转字符串 to_i:转为整数 to_f:转为浮点
20 类的创建
类名第一个要大写字母,否则出错;要创建对象
a=类名.new
self:默认类本身
可以定义同名的类2次,然后方法会合拼,但不建议使用。
嵌套类 比如A::B,为B类在A类中了。
21 特殊类
为某个特定的对象追加方法和属性,这些方法和属性封装到一个类中直接追加到对象中,类没特定的类名。比如
class Animal
end
a=Animal.new
class <<a
.....
end
21 def 方法:
def xxxx()
return
end
22 特殊方法
class Dog
end dog=Dog.new
def dog.show .....end
直接为类的实例添加了方法
23 类方法
class Dog
def Dog.show
.....
end
end
Dog.show
24 类的实例变量用于类内部共享数据。用@符号开头,而类变量可以在各个类之间共享数据
而类变量,用@@定义,可以在多个类中共享变量
25 属性读取器
class Person
def name
@name
end
end
26 属性定义标识符
attr XXXX,TRUE 设置某个XXX属性为可写,false为只读
attr_reader 属性1,属性2....设置多个属性为只读
attr_writer 属性1,属性2....设置多个属性为可写
attr_accessor 属性1,属性2.... 设置多个属性为可读写
27 代码块
比如do
//代码块内容
end
def say
.....
yield //则这里会调用代码块中的内容
end
say do
puts
end
28 类的继承:class 子类<<父类,类的构造方法命名为initialize
20 class A
end
a=A.new
如何通过a象JAVA反射那样得到A,可以这样:#{a.class}