好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

ruby语法

ruby语法

require  ' base64 '
code  =  Base64.encode64( ' hallo ' )
source  =  Base64.decode64(code)

uri

src  =   ' abc编码asdf '
code  =  URI.encode src
src  =  URI.decode code
puts code
puts src


GBK和UTF-8的转换

用GBK而不要用GB2312,因为GBK不仅包含简体中文,还包括繁体中文等,是一个大字符集。

#  utf8 to gbk
def  u2g(ucode)
  begin
     " #{Iconv.conv('gbk','utf-8',ucode)} "
  rescue
      "  #{ucode}  "   # 如果转换不成功 则不转换 并在字串两边加入空格 避免构造出错误的sql字符串
  end
end

这是一个比较不错的从utf-8转换为gbk编码的方法 在网络上抓取的信息 可使用这个方法转换


RUBY DBI
ruby和sqlserver交互的时候 使用dbi是一个不错的选择
dbi有两个比较重要的方法,一个是execute方法,会返回一个结果集,一个是do方法,do方法不会返回结果集,也不会返回受影响的行数,do方法是提交一个事务,而commit方法可以将之前所有使用do方法提交的事务执行,commit会返回受影响的行数。

需要注意的是,如果使用do方法插入一条数据,而没有commit直接disconnect了,将会导致这条数据插入数据库又被删除,因为你这个时候再插入一条新的数据发现,自增长的主键,被空出一个位置来,比如从3一下跳到了5,所以不要忘记commit。

Net::HTTP
Net::HTTP::new方法可以支持4个参数的重载,比如
req = Net::HTTP.new 'xxxxxx测试数据',80,'proxy测试数据',8080
第三个和第四个参数是指定代理服务器
第二个参数指定端口 不写的话默认80


File类的某些方法需要包括'win32/file'
有些方法不能使用,是因为没有包含win32/file库

require  ' win32/file '
File.archive?  ' c:/boot.ini '



请求URI的时候 使用URI::encode转换一下
从uri读到的数据写入本地的时候 使用binmode模式

require  ' open-uri '
uri  =   ' http://xxx测试数据/中文.rar '
data  =  open(URI::encode(uri)){ | f |  f.read}
file  =  File.new uri[uri.rindex( ' / ' )  +   1 ..uri.length - 1 ],  ' w+ '
file.binmode
file  <<  data
file.flush
file.close



执行sql语句的时候 务必替换特殊字符

name  =   " lee's book "
sql  =   " update tb_files set [name] = #{name.gsub( "' "," '' ")}"


RUBY脚本后缀名改为.rbw即可在执行时不显示控制台

ruby奇技淫巧 之 利用Fixnum的upto和downto方法来遍历数组

arr  =   " 1,2,3 " .split( ' , ' )
arr.map!{ | item |  item  =  item.to_i}  # 一般可以用map!方法来改变原数组内容
0.upto(arr.length - 1 ){ | idx | arr[idx]  =  arr[idx].to_s}  # 再将数组内容改回字符串形式 使用upto方法



fixnum对象的upto和downto方法,可以很方便的作为访问一个数组的索引。

其实也可以这样做

(0..arr.length - 1 ).each{ | n |  arr[n]  =  arr[n].to_i}



总之ruby是想怎么写就怎么写 非常方便

我们经常能看到ruby函数的参数前面有带*号,
 def my_open(*args)
 end
这是什么意思呢?
其实也很简单,它的意思是接收任意个参数,并把这些参数组装成一个
名称为args数组。

 def my_open(*args)
  puts(args.length)
 end
 
 my_open("test.rb","w") 
    
    我们可以看到输出的结果是2,这说明了args是一个带有两个元素的

Ruby函数参数(二)

上次说到了方法参数前带*的用法,这次我们说说前面带&的用法。
对这个符号的理解,首先要理解ruby中关于block的概念。
例子:

class Person
   def initialize(&action)
      @action = action
   end

   def say
      @action.call
   end

   def say2
     @action.call
   end
end

p = Person.new{puts("hello world")}
p.say  ---------hello world
p.say2 ---------hello world

在调用say和say2的时候,它们中的@action.call执行了block中的代码也就是puts("hello world")。

可以这么理解,yield提供的是方法级别上执行block中的代码的能力,而&却可以提供
类中各个方法执行相同block代码的能力。也就是上面例子中say,say2都执行了puts("hello world")。

发表于

查看更多关于ruby语法的详细内容...

  阅读:57次