- 浏览: 1409478 次
- 性别:
- 来自: 火星
-
文章分类
最新评论
-
aidd:
内核处理time_wait状态详解 -
ahtest:
赞一下~~
一个简单的ruby Metaprogram的例子 -
itiProCareer:
简直胡说八道,误人子弟啊。。。。谁告诉你 Ruby 1.9 ...
ruby中的类变量与类实例变量 -
dear531:
还得补充一句,惊群了之后,数据打印显示,只有一个子线程继续接受 ...
linux已经不存在惊群现象 -
dear531:
我用select试验了,用的ubuntu12.10,内核3.5 ...
linux已经不存在惊群现象
31 删除指定的字符:
delete方法接受一个字符参数,然后从一个指定的字符串中删除这个字符(是删除所有的,而不只是第一个):
32 打印出指定的字符:
dump方法,打印出字符串,并且转义所有的特殊字符(比如tab键转换为\t)
如果当$KCODE的设置为默认也就是n的话,也就是ASCII编码的话,inspect和dump方法是相同的:
33生成后续字符串
在一些罕见的情况下,我们可能需要得到一个"继承性"的字符串,比如从"aa 1"到"aa 2",等等等,这时我们可以使用succ方法:
不推荐使用这个方法,除非字符串的值是可预计或者这样做是有原因的,如果你的字符串是一个很特殊的字符的话,你得到的结果将会令你十分惊讶(这个不知道他指什么字符,我试了下中文,和&,他们的话都会直接返回原字符串,而不会进行任何转变)
这里还有一个upto方法,这个方法,可以说是循环的调用succ方法。
呵呵,这边还要提一下,我们虽然可以生成后续字符串,可是我们并不能生成前导字符串.
34 计算32位的CRC
CRC,也就是一种校验数据的规则,在ruby中,zlib库就是做这个的。
方法crc32计算出给定的参数字符串的CRC.
35计算一个字符串的MD5 hash.
这边介绍一下MD5了:
md5的全称是message-digest algorithm 5(信息-摘要算法)
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
更具体的看这里:
http://baike.baidu.com/view/7636.html?wtp=tt
而ruby有一个扩展的类实现了md5算法,也就是MD5类。
MD5有两个类方法new和md5,都可以创建MD5对象,而且他们没有任何不同:
还有4个实例方法,clone,digest,hexdigest和update,clone方法简单的复制对象,update方法加一些信息到对象里面.
你也可以在创建对象的同时,加一些信息进去:
重复调用update也就和调用一次,但是把重复调用所加入的信息一次行加入的效果一样:
digest方法提供包含128位的摘要的16字节的二进制字符串
hexdigest方法是最有用的方法,他提供一个表示为32位的16进制字符的ascII码字符串(刚好是16字节,128位)
因此你可以简单的得到MD5 hash
36 计算两个字符串之间的Levenshtein距离
这边有对 Levenshtein距离的介绍:
http://www.matrix67.com/blog/article.asp?id=382
简而言之就是计算两个字符串有多相似.他所计算的就是只使用 del(删除),ins(插入)和替换(sub)从一个字符串变为另一个字符串所需要的最小的步数, 而一个替换被看成一个删除和插入的组合操作.
下面的程序提供了几个可选的参数,你可以设置三种操作的权重.
ps:他这个算法写的,看的我头晕,还不如自己写个呢.
37 解码和编码base64的字符串
base64是我们经常用到的转换机器可读的到文本(除了一些特殊的字符):
使用base64的最简单的方法就是ruby内置的特性,Array类有一个pack方法能够返回一个base编码的字符串(传入参数"m")S,String类有一个unpack方法来对base64进行解码:
这边注意,pack返回的是string,unpack返回的是array
38字符串的编码和解码(uuencode/uudecode)
先看下什么是uuencode和uudecoe吧:
这边也要注意,unpack返回的是array
39扩展和压缩制表符
这边作者可能由于,下一张才讲正则表达式,所以这边的方法比较麻烦.
40 包装文本行
我们经常需要去掉很长的文本行用我们自己选择的空白格式来打印他们:
下周开始正则表达式...
delete方法接受一个字符参数,然后从一个指定的字符串中删除这个字符(是删除所有的,而不只是第一个):
s1 = "To be, or not to be" puts s2 = s1.delete("b") # "To e, or not to e" s3 = "Veni, vidi, vici!" puts s4 = s3.delete(",!") # "Veni vidi vici" puts s5=s3.delete("b") #不存在b所以返回原字符串
32 打印出指定的字符:
dump方法,打印出字符串,并且转义所有的特殊字符(比如tab键转换为\t)
如果当$KCODE的设置为默认也就是n的话,也就是ASCII编码的话,inspect和dump方法是相同的:
s1 = "Listen" << 7 << 7 << 7 # Add three ASCII BEL characters puts s1.dump # Prints: Listen\007\007\007 s2 = "abcdef\t\tghi\n\n" puts s2.dump # Prints: abc\t\tdef\tghi\n\n puts s2.inspect # Prints: abc\t\tdef\tghi\n\n s3 = "Double quote: \"" puts s3.dump # Prints: Double quote: \"
33生成后续字符串
在一些罕见的情况下,我们可能需要得到一个"继承性"的字符串,比如从"aa 1"到"aa 2",等等等,这时我们可以使用succ方法:
droid="aa 1" puts droid.succ #aa 2 pill="aa c" puts pill.succ # aa d
不推荐使用这个方法,除非字符串的值是可预计或者这样做是有原因的,如果你的字符串是一个很特殊的字符的话,你得到的结果将会令你十分惊讶(这个不知道他指什么字符,我试了下中文,和&,他们的话都会直接返回原字符串,而不会进行任何转变)
这里还有一个upto方法,这个方法,可以说是循环的调用succ方法。
"Files, A".upto "Files, X" do |letter| puts "Opening: #{letter}" end # Produces 24 lines of output
呵呵,这边还要提一下,我们虽然可以生成后续字符串,可是我们并不能生成前导字符串.
34 计算32位的CRC
CRC,也就是一种校验数据的规则,在ruby中,zlib库就是做这个的。
方法crc32计算出给定的参数字符串的CRC.
require 'zlib' include Zlib puts crc = crc32("Hello") # 907060870 puts crc = crc32(" world!",crc) # 3273993874 puts crc = crc32("Hello world!") # 3273993874 (相同的字符串生成的校验码是一样的)
35计算一个字符串的MD5 hash.
这边介绍一下MD5了:
引用
md5的全称是message-digest algorithm 5(信息-摘要算法)
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫 readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现(两个MD5值不相同)。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
更具体的看这里:
http://baike.baidu.com/view/7636.html?wtp=tt
而ruby有一个扩展的类实现了md5算法,也就是MD5类。
MD5有两个类方法new和md5,都可以创建MD5对象,而且他们没有任何不同:
require 'md5' hash = MD5.md5 hash = MD5.new
还有4个实例方法,clone,digest,hexdigest和update,clone方法简单的复制对象,update方法加一些信息到对象里面.
hash.update("More information...")
你也可以在创建对象的同时,加一些信息进去:
secret = MD5.new("Sensitive data")
重复调用update也就和调用一次,但是把重复调用所加入的信息一次行加入的效果一样:
hash.update("a") hash.update("b") #上面的也就等于下面的调用 hash.update("ab")
digest方法提供包含128位的摘要的16字节的二进制字符串
hexdigest方法是最有用的方法,他提供一个表示为32位的16进制字符的ascII码字符串(刚好是16字节,128位)
secret..hexdigest #b30e77a94604b78bd7a7e64ad500f3c2 #下面的代码就是hexdigest的实现 def hexdigest ret = '' digest.each_byte {|i| ret << sprintf('%02x', i) } ret end secret.hexdigest # b30e77a94604b78bd7a7e64ad500f3c2
因此你可以简单的得到MD5 hash
require 'md5' puts m = MD5.new("Sensitive data").hexdigest
36 计算两个字符串之间的Levenshtein距离
这边有对 Levenshtein距离的介绍:
http://www.matrix67.com/blog/article.asp?id=382
简而言之就是计算两个字符串有多相似.他所计算的就是只使用 del(删除),ins(插入)和替换(sub)从一个字符串变为另一个字符串所需要的最小的步数, 而一个替换被看成一个删除和插入的组合操作.
下面的程序提供了几个可选的参数,你可以设置三种操作的权重.
class String def levenshtein(other, ins=2, del=2, sub=1) # ins, del, sub are weighted costs return nil if self.nil? return nil if other.nil? dm = [] # distance matrix # Initialize first row values dm[0] = (0..self.length).collect { |i| i * ins } fill = [0] * (self.length - 1) # Initialize first column values for i in 1..other.length dm[i] = [i * del, fill.flatten] end # populate matrix for i in 1..other.length for j in 1..self.length # critical comparison dm[i][j] = [ dm[i-1][j-1] + (self[j-1] == other[i-1] ? 0 : sub), dm[i][j-1] + ins, dm[i-1][j] + del ].min end end # The last value in matrix is the # Levenshtein distance between the strings dm[other.length][self.length] end end s1 = "ACUGAUGUGA" s2 = "AUGGAA" puts d1 = s1.levenshtein(s2) # 9 s3 = "pennsylvania" s4 = "pencilvaneya" puts d2 = s3.levenshtein(s4) # 7
ps:他这个算法写的,看的我头晕,还不如自己写个呢.
37 解码和编码base64的字符串
base64是我们经常用到的转换机器可读的到文本(除了一些特殊的字符):
使用base64的最简单的方法就是ruby内置的特性,Array类有一个pack方法能够返回一个base编码的字符串(传入参数"m")S,String类有一个unpack方法来对base64进行解码:
str="abcds" puts newstr=[str].pack("m") puts newstr.unpack("m")
这边注意,pack返回的是string,unpack返回的是array
38字符串的编码和解码(uuencode/uudecode)
先看下什么是uuencode和uudecoe吧:
引用
uuencode是将二进制文件转换为文本文件的过程,转换后的文件可以通过纯文本e-mail进行传输,在接收方对该文件进行uudecode,即将其转换为初始的二进制文件。
而uudecode就是将编码后的还原的.
而uudecode就是将编码后的还原的.
str = "abcds" puts new_string = [str].pack("u") puts original = new_string.unpack("u")
这边也要注意,unpack返回的是array
39扩展和压缩制表符
这边作者可能由于,下一张才讲正则表达式,所以这边的方法比较麻烦.
40 包装文本行
我们经常需要去掉很长的文本行用我们自己选择的空白格式来打印他们:
str = <<-EOF When in the Course of human events it becomes necessary for one people to dissolve the political bands which have connected them with another, and to assume among the powers of the earth the separate and equal station to which the Laws of Nature and of Nature's God entitle them, a decent respect for the opinions of mankind requires that they should declare the causes which impel them to the separation. EOF max = 20 line = 0 out = [""] input = str.gsub(/\n/," ") words = input.split(" ") while input != "" word = words.shift break if not word if out[line].length + word.length > max #大于max的话就换到下一个元素 out[line].squeeze!(" ") line += 1 out[line] = "" end out[line] << word + " " #将word添加到out[line] end out.each {|line| puts line}
下周开始正则表达式...
发表评论
-
一个创建闭包的小技巧
2008-06-05 00:12 2177一个小技巧,在Ola Bini 的blog上看到的。 假设你 ... -
解决Colored Cubes问题
2008-06-02 10:43 2820Engineering Puzzle You have fo ... -
ruby1.9中的Iterators
2008-03-05 22:37 3744在ruby1.9中增加了External Iterators这 ... -
一个简单的ruby Metaprogram的例子
2008-03-03 23:49 4131比如下面一个文件 people.txt 引用name,age ... -
Ruby Object Model
2008-03-03 19:29 3614刚好看到,保存一下. -
一个检测方法的参数类型的小程序
2008-03-02 22:48 3266今天没事看blog的时候,看到一个小子实现了这个,不过他的程序 ... -
rails中的BlankSlate源码分析
2008-02-28 23:27 3503其实这个类实现的功能很简单,那就是实现一个没有predefin ... -
ruby中的类变量与类实例变量
2008-02-26 21:15 7664首先,在ruby1.8中类变量是所有子类和父类共享的,可以看下 ... -
在ubuntu上共存多个版本的ruby
2008-02-24 15:20 4396今天装Revactor库的时候,真把我郁闷了,没想到ubunt ... -
看到了一个用ruby写的scheme解释器
2008-02-16 21:35 3815,自己本来想等啥时候有时间做个类似的东西呢,没想到已经有人做 ... -
ruby way之处理RSS和Atom
2008-01-31 01:32 35441 rss 标准库 RSS 是基于xml的,因此你能简单的将 ... -
ruby way之使用REXML解析xml
2008-01-30 00:35 9303REXML 是一个完全用ruby写的processor ,他有 ... -
rails2中的一些被废弃的用法
2008-01-29 00:33 2554这些只是自己最近看web开发敏捷之道的时候(由于书中的版本是1 ... -
ruby way之动态特性之二
2008-01-25 00:49 37361 得到所定义的实体的列表 ruby的反射api能够使我们在 ... -
ruby way之动态特性之一
2008-01-23 01:25 45971 动态的evaluate代码 全局的方法eval 编译并且 ... -
ruby way之高级OOP特性之二
2008-01-20 03:43 29811 把代码像对象一样存储 当你想要以对象的形式存储一块代码的 ... -
ruby way之高级OOP特性之一
2008-01-19 12:14 23281 发送一条消息给一个对象 当你调用一个方法时,你也就是发送 ... -
ruby way之OOP之二
2008-01-16 23:59 23871 理解allocate 在一些特殊的环境中,你可能需要不调 ... -
ruby way之OOP之一
2008-01-16 00:25 26741 使用多个构造方法 在ruby中没有像c++或者ruby中 ... -
ruby way之连接数据库
2008-01-14 00:47 2513这边都只是个大概,具体的要自己去看文档了. 1 连接SQLi ...
相关推荐
Ruby在很多方面与Perl、Python和Smalltalk有相似之处,但其语法更加简洁明了,特别适合初学者入门。 Ruby的核心特性包括: 1. 面向对象:Ruby的万物皆对象,就连基本的数据类型如整数、字符串和布尔值都是对象,...
简介 这是 Ruby 的一个简单 gem,可简化验证电子邮件地址。 它符合 RFC2822。 这是一个快速的代码示例。 目前没有文档。 require 'rfc822'# To test if whole string is an email... ugly way# (returns 0 on ...
南信大实验报告封面(Word版)专为英文课程设计,提供简洁、规范的模板,方便学生快速填写实验信息。适用于各类实验报告,确保格式统一,提升报告的专业性。下载后可直接编辑,节省时间,助力高效完成实验任务。
基于树莓派5使用L298N驱动模块驱动电机
甜面酱检验表格(食品企业原辅料质量验收记录表).docx
复现一篇nano letters,基于传输相位的双通道全息超表面,能掌握gs算法,传输相位,单元库的制备等知识 ,核心关键词:复现nano letters; 传输相位; 双通道全息超表面; GS算法; 单元库制备,复现Nano Letters双通道全息超表面:掌握GS算法与传输相位技术
《电力电子技术(第5版)》王兆安_第2章_电力电子器件
红曲红色素检验表格(食品添加剂食用香精质量验收记录表).docx
IMU和GPS融合 ekf融合定位 从matlab到c++代码实现 组合导航松耦合融合 34页超级详细的文档,对每个函数都进行了非常详细的讲解分析 ,IMU_GPS融合; EKF融合定位; 松耦合融合; Matlab到C++代码转换; 34页详细文档,IMU与GPS融合定位:Ekf算法从Matlab到C++的实现与解析
【CSP备考宝典】精选CCF计算机软件能力认证历年模拟考试题解,提供详细解析与高效备考策略,助你快速掌握考点,提升应试能力。无论你是初学者还是进阶者,这份指南都能为你指明方向,轻松应对CSP认证考试。
储能变流器pcs整流器仿真模型,联系默认发百度,ANPC电路拓扑,2.5MW,电压外环,电流内环,2016版本的matlab ,关键词:储能变流器; PCS整流器; 仿真模型; 联系默认发百度; ANPC电路拓扑; 2.5MW; 电压外环; 电流内环; 2016版Matlab;,储能变流器2.5MW整流器模型与ANPC电路拓扑的仿真研究
apollo 泊车轨迹优化代码 hybridastar+iaps平滑优化+obca平滑优化 第一个图是matlab绘制 后面的图是程序用sdl库绘制 ,apollo;泊车轨迹优化;hybridastar;iaps平滑优化;obca平滑优化;Matlab绘制;SDL库绘制,基于Apollo的泊车轨迹优化:HybridA*算法+平滑优化技术的实现与展示
对酒苏奥多资源尿酸
内容概要:本文基于Rayleigh梁理论,探究了湿热环境下具有弹性支撑根部的旋转复合材料非均匀梁的振动特性和动态响应。文中建立了考虑温度、湿度和其他参数对自然频率和动态响应影响的运动方程。运用哈密顿变分原理推导出该系统的控制方程,并基于最小势能原理获取弯曲基本频率的上界和下界。最终利用幂级数方法求解出半解析形式的自然频率和动态响应表达式。数值计算部分展示了不同条件下(如转速、根半径、纤维倾角比)对该系统的影响。 适合人群:从事复合材料力学性能研究的研究员、工程师以及机械工程专业高年级本科生和研究生。 使用场景及目标:该论文对于涉及航天航空领域的轻质高强度叶片结构的设计有重要的指导意义。通过对实际应用条件(如风力涡轮机翼型、直升机螺旋桨、飞机推进器)下非均匀截面复合材料梁的行为研究,可以更好地优化其形状设计和增强抗振能力。具体来说,本研究旨在解决因工作环境中复杂变化引起的材料属性和动力行为改变的问题。 其他说明:本文结合了前人大量研究成果进行了扩展性探讨,并通过对比有限元法验证了所提出的功率级数方法的有效性。同时提供了详细的理论模型推导过程及其应用背景介绍。
苹果酸检验表格(食品添加剂食用香精质量验收记录表).docx
内容概要:本文研究了一类含有混合阶次动力学、外部扰动以及执行器故障的异构多智能体系统的领导-跟随一致性跟踪问题。首先提出一种基于高阶滑模观测器和双层自适应规则相结合的新颖有限时间观测器实现了对未知扰动和故障快速估计与补偿。然后引入新颖滑模面实现固定时间一致协议并解决其奇异性问题,同时为各从动节点的一阶或二阶动力学设计分布式控制器确保与领导者节点同步化状态收敛。最后用仿真实验验证了所提算法的有效性和优越性。 适合人群:具备自动控制理论、系统工程、机器人学等相关背景的研究人员、博士生或高级工程师。 使用场景及目标:该研究适用于无人飞行器队形保持、移动传感器网络定位校准等多种实际工业应用场景,在外部扰动与自身可能发生的部分故障条件下仍然能够使不同动态特征的多个个体达到理想的协调行动。 其他说明:本文提出的非奇异固定时间观测和容错控制机制提高了多智能体系统鲁棒性能,克服了传统方法难以同时处理多种不确定因素(如随机噪声、建模误差)及复杂任务环境的影响的问题。此外,在具体应用过程中需要关注观测精度及时延特性等因素优化控制系统设计参数。
comsol声子晶体建模文件教程,带隙计算,传输损耗计算 ,comsol;声子晶体建模;文件教程;带隙计算;传输损耗计算,COMSOL声子晶体建模与传输损耗计算教程
SYT 5420-91 石油勘探开发仪器基本环境试验方法 试验D:低温试验.pdf
系统采用B/S架构,集成Spring Boot(后端)、Vue.js(前端)和MySQL(数据库),通过RESTful API实现前后端分离。采用MyBatis-Plus优化数据访问,模块化设计与自动配置提升开发效率,结合数据库索引和读写分离确保性能,Element UI提供友好交互,整体具备高扩展性和可维护性。