`

ror学习小结2

 
阅读更多
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 resenet模型

    这两个数据集的难度相对较大,因为类别的数量多,图像尺寸小,这使得它们成为评估深度学习模型在图像识别上的有效性的重要基准。 **ResNet和Ror模型在CIFAR数据集上的表现** 在CIFAR-10上达到89%的准确率,以及在...

    初探ROR

    **初探ROR** Ruby on Rails(简称ROR)是一个基于Ruby编程语言的开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在促进...通过学习和实践,你将能够利用ROR构建出功能强大、易于维护的Web应用程序。

    Windows 上搭建 ROR环境

    ### Windows上搭建Ruby on Rails(ROR)环境详解 #### 一、引言 随着Web开发技术的不断发展,Ruby on Rails(简称Rails或ROR)作为一种高效、简洁且优雅的Web开发框架,受到了广大开发者的青睐。然而,在Windows...

    freemis 基于ror框架的mis

    2. **ActiveRecord**:这是RoR中的一个ORM(对象关系映射)库,允许开发者用Ruby类来代表数据库表,通过面向对象的方式来操作数据库,简化了数据库交互。 3. **Scaffolding**:RoR提供快速原型开发工具,能自动生成...

    基于sqlite的ror例子

    标题 "基于sqlite的ror例子" 暗示我们即将探讨的是如何在Ruby on Rails (RoR) 应用程序中使用...通过学习这个例子,开发者可以深入理解RoR如何与SQLite数据库协作,这对于初学者和有经验的开发者都是宝贵的学习资源。

    基于RoR的在线考试系统

    2. **课程与科目管理**:教师可以创建和管理不同的课程,每个课程可能包含多个科目。这需要在数据库中设置关联关系,如通过has_many和belongs_to关系定义课程与科目、科目与试题之间的关联。 3. **试题库管理**:...

    IRIS-RoR-Bootcamp-2020

    IRIS-RoR-Bootcamp-2020 由于大多数参与者都不熟悉Ruby,因此我们创建了一些练习来学习和练习Ruby语法-涵盖条件语句( if , else , elsif ),不同的迭代方式( each , select和map )以及面向对象的基本代码...

    铁道中文应用开发现状综述2006版

    本报告旨在总结2006年8月底之前的Ruby on Rails(简称ROR)在中国的应用和发展现状,侧重于描述而非深度分析。报告计划随着ROR在中国的发展而不断更新,未来版本可能会引入更加科学严谨的数据收集方法,例如问卷调查...

    arm指令 指令学习

    ### ARM指令集学习知识点 #### 一、ARM指令集概览 ARM(Advanced RISC Machines)指令集是一种基于精简指令集计算机(RISC)架构的指令集标准,广泛应用于移动设备、嵌入式系统等领域。本章节将详细介绍ARM指令集的...

    有机化学复习总结wei.doc

    - **亲核试剂** 是对正电荷或部分正电荷碳原子具有亲和力的试剂,如 OH-、NH2-、ROR 等。亲核试剂是路易斯碱,能够给出电子对。 在判断反应类型时,通常根据与碳原子首先形成共价键的试剂来决定是亲电反应还是亲...

    汇编语言知识点总结.docx

    4. **逻辑运算指令**:如AND、OR、XOR用于逻辑操作,NOT用于取反,TEST用于测试,SHL、SAL、SHR、SAR用于位移,ROL、ROR、RCL、RCR用于循环移位。 5. **其他指令**:如CBW、CWD、CWDE、CDQ用于数据转换,它们根据...

    学习汇编很好的例子,也可加深对C语言理解

    通过深入学习汇编语言,不仅可以提升程序员对底层硬件的理解,还能帮助他们更好地掌握高级语言如C语言的工作原理。本文将通过对给定汇编代码片段的分析,来探讨几种重要的定点运算及转换技巧,并结合实例说明这些...

    NAIS PLC中文手册第三章高级指令(7).pdf

    总结来说,通过上述高级指令的详细解析,我们可以了解到NAIS PLC中文手册第三章所涵盖的高级指令在数据位操作方面的强大功能和灵活应用,以及在编程时需要注意的规则和限制。这些知识点对于PLC程序员在实际应用中...

    Java、.Net、PHP、Ruby优劣势概览

    然而,Java 的部署过程相对繁琐,不适合快速开发和小型项目,学习曲线也相对较陡峭。 .Net,尤其是从1.x到3.0的进化,逐渐增加了企业级开发的功能,如ASP.NET MVC等框架。在Web开发中,.Net 的服务器控件为开发带来...

    myRoR:在 thinkful.com 学习 Ruby on Rails

    学习RoR不仅仅是学习语言和框架本身,还包括如何利用这些强大的库来解决实际问题。 通过"myRoR"的学习,你将不仅了解到RoR的基本概念,还能深入理解Web开发流程,包括数据库设计、前后端交互、用户体验优化等。在...

    Struts2中的标签介绍及应用实例

    Struts2是一个流行的Java web框架,它极大地简化了MVC(模型-视图-控制器)架构的实现。在Struts2中,标签库是其强大功能的...在未来的学习中,深入研究Struts2的主题机制和自定义标签将会带来更大的灵活性和控制力。

    微机原理与接口实验报告

    **四、实验小结** - 通过这两个实验,学生能够深入理解8255芯片的基本工作原理及其在微机系统中的应用。 - 实验中遇到的问题,如软延时不够精确等问题,可以通过增加循环次数或使用硬件定时器等方式解决。 #### ...

    Milog是一个基于RubyonRails的个人博客网站_Ruby_HTML_.zip

    **Milog:基于Ruby on Rails的个人博客系统** Ruby on Rails(RoR)是一个流行的开源Web应用程序框架,它采用模型-...通过学习和理解这个项目,开发者不仅可以深化对RoR的理解,还能掌握构建Web应用的基本流程和技巧。

    RailsTutorial_FirstApp:Rails教程first_app

    在Ruby on Rails(RoR)框架中,"RailsTutorial_FirstApp"是一个常见的起点,用于学习和实践RoR的基础知识。这个教程旨在引导开发者创建他们的第一个Web应用程序,这通常包括了解RoR的核心概念、MVC(模型-视图-控制...

Global site tag (gtag.js) - Google Analytics