03 2013 档案
摘要:你有多少种方式创建一个方法?大多数人想到的可能是def 关键字 Ruby代码 #普通方法 deftele_you puts"IamAnleb"end#普通方法def tele_you puts "I am Anleb"endRuby代码 #定义单件方法 n="Anleb"defn.tell_you puts"Iam#{self}"endn.tell_you#定义单件方法n="Anleb"def n.tell_you puts "I am #{self}"endn.tell_y
阅读全文
摘要:我们知道顶级域,定义域的self是啥?puts self #mainputs self.class #Object我们知道当一个方法被调用的时候,如果没有对象接受,默认就是self,如:def tell_me_who puts selfendtell_me_who #main方法调用是这样的步骤,先查找当前对象的所在类的实例方法存在方法与否,如果存在,调用方法,如果不存在则查看superclass,直到 BasicObject都没找到对于方法的话,就会调用Kernel的method_missing()方法,并且报错,如Error:test.rb:8: undefine: unde...
阅读全文
摘要:1.先看字符串的object_idstr1="Anleb"str2="Anleb"puts str1.object_idputs str2.object_id输出: 22952500 22952490 id不同说明,虽然对象的值一样,但是他们是不同的东西,什么是不同的东西,也就是指针不同。 str1指针----> 对象 str2指针----> 对象 题外话:不像咱们的c#、java有字符串驻留技术,ruby没有驻留技术的String对象,但是有驻留技术的Fixnum,false,true,不信,我实验给你看s1=falses2=falses3
阅读全文
摘要:class A def self.ask1 puts "the method of class" end def ask2 puts "the method of instance" endend#类的实例对象的方法,方法属于类所生成New出来的实例对象。 p a.methods.length p a.class.instance_methods.length p A.instance_methods.length p a.public_methods.length p a.class.public_instance_methods.leng...
阅读全文
摘要:n=[1,2,3,nil,nil]p nn1=n.compactp n1n2=n.compact!p n2p n主要是交流,水平有限,喜欢研究,多多包涵。 先说一个数组循环问题 arr=[1,2,3]n=arr << arrp n输出: [1, 2, 3, [...]] 分析: << 传进去的是一个arr指针 # =>[1,2,3,arr] 其实这是一个循环,真实的值是:[1,2,3,[1,2,3,[1,2,3,[1,2,3,........]]] arr[3]=arr arr[3][3]=arr ruby数组比较常用的方法: 1.at方法 arr=[1,2,3]
阅读全文
摘要:1.先看私有方法能否被继承class A @@name="Anleb" def ask puts @@name end private :askenda=A.new#a.aska.send(:ask)class B < A endb=B.new#b.askb.send(:ask)结论:对于private方法,是被继承的,类变量(类似于静态变量,属于所有实例),也是可以被继承的。 2.看类的方法能否被继承 题外话:private影响谁? class A private def self.ask puts "class...
阅读全文
摘要:class Fixnum attr_accessor :valueendx=1p x.object_idx.value="Anleb"p x.value.object_iddef change(x) p x.object_id p x.value.object_id x=2 #指针改变 x.value="Mr.w" p x.object_id p x.value.object_id #x改变的指针在这里被GC回收endchange xp xp x.valuep x.object_idp x.value.object_id打印...
阅读全文
摘要:irb(main):022:0* 1.next=> 2irb(main):023:0> "a".next=> "b"irb(main):024:0> "1".next=> "2"irb(main):025:0>性能比较:require 'benchmark'n=(1..1000000).to_adef num_next(first,last) while first != last first=first.next end enddef num_join(firs
阅读全文
摘要:ary=[1,2,3]ary.each do |i| puts i i+=1 redo if i==2end#输出:1223redo做的动作是:条件满足,则以当前的条件重复一次{ block}的动作,当前的条件包括(当前的变量值)ary=[1,2,3]ary.each do |i| puts i i+=1 retry if i==2end#输出:死循环1 这里我们没有看到 i+=1,输出 2,说明,retry的重复动作包括从{block}外开始,包括i的值。
阅读全文
摘要:#关闭命令显示@echo off#提示信息echo Now,listing the controller,please not shutdown the DOS File!#切换到当前路径,.bat文件和.rb文件放在一起就可以了set pa=%cd%#执行ruby脚本ruby test.rbpause当我们利用cmd命令执行:ruby test.rb的时候,你可能会发现,我们需要cd 到test.rb的目录,可以利用DOS命令实现这个 路径,这样无论你的脚本在哪,批处理调用ruby test.rb都不会报错。
阅读全文
摘要:#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]){ int i1,i2,*p1,*p2,*p3; i1 = 4; i2 = 5; p1 = &i1; p2 = &i1; p3 = &i2; p1 = p3; printf("%d\n%d\n%d\n",*p1,*p2,*p3); system("PAUSE"); return 0;}这是一次 指针值的交换,并非是指针指向的值的交换,看似有 1个地方存 指针这个变量的值,
阅读全文
摘要:先说下利用了AutoItX3.dll这个API,这个东西没有怎么办,ruby的watir GEM包里自带这个dll。 如果出现“unknown OLE server: ‘AutoItX3.Control’(WIN32OLERuntimeError) ”这个错误,可能是因为你的dll没有注册。解决方式如下:regsvr32 AutoItX3.dll路径可能要变下:如:regsvr32 C:\Ruby\lib\ruby\gems\1.8\gems\watir-1.6.5\lib\watir\AutoItX3.dll (For Ruby 1.8.6)regsvr32 C:\Ruby187\lib\r
阅读全文
摘要:#encoding: gbkrequire 'find'print "输入目录:"path=gets.chomp!print "输入后缀名:"basename=gets.chomp!Find.find("#{path}") do |d| if d.include?(".torrent") puts "[INFO]删除文件#{d}" endend应该不是 多线程实现的,对于自己用,很实用,对于文件多的,可怕性能有点。。
阅读全文