1 定义模块
module xxx x
方法体
end
可以在类中混合方法体,比如
module abc
def abc1
end
class Test
include abc
end
test=Test.new
test.abc1
2 命名空间
module 的名不同,在module中可以包含class ,class中即使有相同的def方法定义也没问题
3 begin end 块
当多个begin 。。end块时,按加载顺序依次执行begin ,end的顺序则先出现的最后执行,反过来最先
而at_exit则在END之后再执行,顺序依然是出现的最后执行,反过来最先。
4 加载其他文件
load的用法:load "Module/xxxx/xxx.rb"
require则可以加载各类其他文件,但只能加载一次,而load 可以加载多次
extend:在一个对象中引入一个模块
module Mood
def test
end
end
class Person
extend Mood
end
person=Person.new
person.extend(Mood)
person.test
5 别名
def name
end
alias news_name name
6 定义:判断某个表达式是否已经完成定义,使用defined
defined?表达式 比如defined?"hello" 输出expression. 还可以判断方法,当然一个方法已定义时,输出
"method"等等。
7 method_missing ,当调用一个类和实例的某个方法时,如果不存在,则调转
def method_missing XXX
end
8 duck typing特性
例子:
class MusicAvi
def play
puts ".avi格式的视频已经添加到列表中"
end
end
class Music3gp
def play
puts ".3gp格式的视频可以播放"
end
end
class MusicRmv
def play
puts ".rmv的格式的视频在这里也可以播放,不信,你试试"
end
end
class MusicRmvb
def play
puts ".rmvb格式的视频更不用说 了。"
end
end
def playMusic(music)
music.play
end
playMusic MusicAvi.new
playMusic Music3gp.new
playMusic MusicRmv.new
playMusic MusicRmvb.new、
9 proc对象
pr=Proc.new{puts "hello"}
pr.call,这个时候才会输出hello
实际上将其值保存下来了。比如:
def call_proc(pr)
pr.call //这里输出hello
end
a="hello"
pr=Proc.new(puts a)
参数加&,则该参数作为一个Proc对象来处理
def info(pr)
pr.call
end
pro=Proc.new{
@name="郭靖"
@age=20
@expression="人虽然笨,但纯真善良是不可改变的事实"
puts "名字是:#{@name}"
puts "年龄是:#{@age}"
puts "描述是:#{@expression}"
}
info(pro)
10 动态执行字符串代码
str="def xxxx;puts 'sdsdds';end"
eval(str)
12 异常
begin end 内放要保护的代码块;而rescue为抛出异常,ensure完成资源回收
异常出现的信息:#{$!.to_s}
异常出现的位置: #{$@.to_s}
retry:在遇到异常的情况下,重新跳转到begin部分,比如:
begin
....
end
rescue
retry
end
13 创建自定义异常类
class NewException<Exception
def Erromessage
....
end
rescue NewsException=>e
#{e.Erromessage}
14 正则表达式中,使用=~可以判断,如果有匹配的字符串则返回其索引,否则返回nil
15 显示时间:time=Time.new
#{time.year},#{time.month}........
16 返回一年中的第几日
time=Time.new
#{time.yday}天,#{time.mday}//一个月中的第几日 #{time.wday} //一个星期中的第几日
17 日期格式化 time.strftime("今天是%x") ..........
18 创建线程
xiancheng=Thread.new do
end
还可以用start和fork来创建
Thread.start(fork) "hello" do |value|
currentThread=Thread.current //返回当前线程
执行join,可以挂起当前线程
pass:暂停当前线程,sleep+秒数 休眠线程;
exit和kill,可以停止线程
thread=Thread.start do
....
end
s1=thread.status //获得当前线程状态
19 Mutex类
@mutex=Mute.new
锁定资源 @mutex.lock
20 垃圾回收机制
GC.enable,GC,start,GC.disable
21 获得文件权限
fp="xxxx.doc"
File.stat(fp).mode //获得权限
File.chmod(01522,fp)//设置权限
FileTest.exist?(fp)
filePath="d:\\test.php"
puts "File Path: #{filePath}"
if(FileTest.exists?(filePath))
puts "访问权限: #{File.stat(filePath).mode}"
size=FileTest.size(filePath)/1024
puts "文件大小: #{size} KB"
puts "创建时间: #{File.ctime(filePath)}"
puts "最后修改时间: #{File.mtime(filePath)}"
puts "最后访问时间: #{File.atime(filePath)}"
else
puts "文件不存在!"
end
22 读取文件
例子:file=File.new(fp);
或者file=open(fp);file.close
file.read(8);file.readchar //读一个字符
gets方法,一行行读,读到文件尾返回nil
while line=file.gets
put line
end
例子:
fp="ReadFile.rb"
file=File.new(fp)
lines=file.readlines
file.close
i=0
while i<lines.length do
puts "#{i} : #{lines[i]}"
i+=1
end
23 写入文件
class SiteInfo
def initialize(title, domainName, ip, email)
@title=title
@domainName=domainName
@ip=ip
@email=email
end
attr_accessor(:title, :domainName, :ip, :email)
end
siteinfo=SiteInfo.new("dsdsdsd","www.sdsdsd.com","127.0.0.1","a@yz0101.com")
filePath="siteInfo.txt"
file=File.new(filePath, "w")
file.puts(siteinfo.title)
file.puts(siteinfo.domainName)
file.puts(siteinfo.ip)
file.puts(siteinfo.email)
file.close
24 删除文件;delete和unlink;
重命名:File.rename(原来文件名1,新文件名1)
File.dirname(fp) //获得文件所在目录名
File.basename(fp) //获得连后缀的名
File.basename(fp,".txt")//去掉后缀
File.expand_path(fp) //获得绝对路径
Dir.delete("目录名") Dir.rmdir("xxxx") //换名
Dir.pwd 获得当前目录
25 MYSQL相关操作
1)例子
require "mysql"
def createSQL(score)
"insert into scores(subject, score, student_name, `explain`) "+
"values('#{score.subject}', #{score.score}, '#{score.student_name}', '#{score.explain}')"
end
def saveScore(dbh, score)
sql=createSQL(score)
dbh.query(sql)
if(dbh.affected_rows==1)
puts "学生 #{score.student_name} 的成绩信息已被加入数据库"
end
end
# 创建数据库连接对象并打开数据库连接
dbh = Mysql.real_connect("localhost", "root", "", "db_student")
2)遍历
res=dbh.query(sql)
while row=res.fetch_row
row[0].......
也可以用HASH:#{res.fetch_hash["字段名"]
3)显示结果集时,如果为空,可以做点判断,比如:row[2]=0 if row[2].nil?
40
4)过滤攻击 insertcontent=dbh.escape_string(".....")
5) #{res.num_fields}字段数 #{res.num_rows} 结果集中行数
6)使用DBI操作数据库
require "dbi"
begin
dbh=DBI.connect("dbi:Mysql:db_log:localhost","root","")
dbh.do("create table log_02(
`id` int unsigned NOT NULL AUTO_INCREMENT,
`user` varchar(50),
`operate` varchar(250),
`record_time` datetime,
PRIMARY KEY (`id`)
)")
rows_num=dbh.do("
insert into log_02(user,operate,record_time)
values('admin','账号 admin 登录系统','2010-12-25 12:25:30'),
('admin','管理员 admin 删除用户 joker','2010-12-25 12:27:35')
")
puts "操作响应行数为: #{rows_num}"
rescue Mysql::Error => e
puts "Error Number: #{e.errno}"
puts "Error Message: #{e.error}"
puts "Error State: #{e.sqlstate}" if e.respond_to?("sqlstate")
ensure
dbh.disconnect if dbh
end
DBI支持占位符,比如
rows_num=dbh.do("
insert into
staffs(`name`, `sex`, `age`, `politics_status`, `IDNO`, `birthdate`, `email`, `mobile`,
`native_place`, `blood_type`, `nation`, `work_unit`, `school`)
values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
"李小贝", "女", 25,
.........
7)事务处理
require "dbi"
dbh=DBI.connect("dbi:Mysql:db_bank:localhost","root","")
dbh['AutoCommit']=false
money=800 #转账金额
factorage=20 #手续费
output="6543216598743210" #转出账户
input="6543216965413254" #转入账户
begin
#从转出账号上扣除转账金额
dbh.do("update cards set money=money-#{money} where card_number='#{output}'")
#向转入账号上添加转账金额
dbh.do("update cards set money=money+#{money} where card_number='#{input}'")
#从转出账号上扣除手续费
dbh.do("update cards set money=money-#{factorage} where card_number='#{output}'")
dbh.commit
rescue Exception => e
puts e
dbh.rollback
end
ror学习小结2
原创
©著作权归作者所有:来自51CTO博客作者mb5c80f4c73b73a的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:android学习小结3
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
C语言学习2
第二天
操作符 数组 字符串 -
ror学习小结6
1 每个controler都会在app\views下有一个相应的目录2 视图中输出deb
html xml Ruby -
android学习小结2
1 在1。5的android中,可以指定edittext中只输入数字,比如可以这样,就弹出小键盘
Android Google Go android bundle -
python 初步学习 小结2
一 字符串
python bc 实例化 父类 -
flex 3 学习小结2
1 数据绑定 horizontalAlign="center"> 就是用{}拉2 model绑定
flex application datagrid encoding object