Ruby中的方法是一个有名称的代码块,是与一个或多个对象关联的参数化的代码。调用时须给出方法名,接收者(所在对象),参数值,且最后一个表达式的值做为返回值。与Ruby方法相似的是代码块,它没有名字,且调用时只通过迭代器或被间接调用。
(一)方法
(1)定义方法
定义方法就是
def 方法名(参数列表) 方法体 end
class Test def instance_method_test(v) puts "#{v}: instance method" end end t1=Test.new t2=Test.new t1.instance_method_test("t1") t2.instance_method_test("t2") def t1.singleton_method_test(v) puts "#{v}:singleton method" end t1.singleton_method_test("t1") #t2.singleton_method_test("t2")
在ruby中,方法一般小写字母开头,如果超过一个单词,则由下划线隔开(看习惯)。有意思的是方法名可以以等号、问号、叹号结尾,且有不同的意义:以等号(=)结尾表示这是一个赋值方法(写属性);以问号(?)结尾表示一个断言方法,可以回答调用者提出问题的值,例如判断大小;叹号(!)结尾表示是一个可变方法,可能会影响到对象的状态,要小心使用。这三个符号很有意思,但它们不是必须的。
(2)取消方法
通过undef 方法名 可以取消方法。对于被继承的方法,undef可以取消子类中的继承来的方法,但不会取消父类中的此方法。
(3)方法参数
在参数中添加等号和值就可以为这一个参数设置默认值。如果参数有默认值,那么在调用方法时,可以为这个参数指定值或不指定值。
def createRole(name,level=1) puts "role name is#{:name} level is #{level}" end createRole("way") createRole("clound",5)
def add_Person(*users) puts users end add_Person("a1","a2") add_Person("a1","a2","a3")
(二)代码块
方法调用后可以紧跟一个代码块,关联代码块的方法可以通过yield来调用。
def showMessage(i) yield i*2 print i end showMessage(5){|x|print "#{x}"}
#传递代码块,代码块参数须为最后一个,且添加&前缀;且调用时用proc的call方法 def fun_block(i,&b) b.call(i*2) end fun_block(2){|x|puts x} #显示传递proc对象。那么方法中proc对象部分的参数不加&前缀 def fun_proc(i,b) b.call(i*2) end p=Proc.new{|x|puts x} fun_proc(2,p) c=[1,2,3,4,5,6] b=c.select{|x|x%2==0} p1=Proc.new{|x|x%2==0} d=c.select(&p1) puts d
#1.8k中 d1=lambda{|x|x+1} puts d1.call(5) #1.9中,将lambda换为->;参数放到花括号外边,小括号里边;花括号中只保留表达式 #与.net3.*中的lambda表达式很像()=>{} d2=->(x){x+1} d2.call(5)
ruby中的proc和lambda都是闭包(closure)。闭包表示一个对象既是一个可调用的函数,同时也是绑定在这个函数上的一个变量。从表面上解释闭包就是:方法A内的方法B调用方法A的变量,并返回结果。方法B就是闭包。它的作用:一是B方法的变量可以在方法外使用;二是A方法中的变量可以安全使用;三是对B方法中的值进行缓存。
(关于闭包,可以查看相关文档,我这里只是粗浅的认识。)
本文向大家介绍Ruby基础知识之类,包括了Ruby基础知识之类的使用技巧和注意事项,需要的朋友参考一下 创建类: class后跟类名,其中类名的首字母必须要大写。实例化时,通过new方法实例化。在c#中有构造器,构造器与类同名。在ruby中,构造器为initialize方法。当通过new方法实例化一个类对象后,会自动调用initialize方法,把new中的参数传递给initialize方法进行初
本文向大家介绍Ruby基础知识之数据类型,包括了Ruby基础知识之数据类型的使用技巧和注意事项,需要的朋友参考一下 一、数值类型 (1)整型 整型分两种,如果在31位以内(四字节),那为Fixnum实例。如果超过,即为Bignum实例。 (2)浮点型 浮点有个圆整错误,例如:0.4-0.3==0.1 这是不等的。C#中也是如此(采用IEEE-754浮点的都是如此)。因为很多浮点数是用一种近似值来表
本文向大家介绍Ruby基础知识之基本流程控制,包括了Ruby基础知识之基本流程控制的使用技巧和注意事项,需要的朋友参考一下 (一)条件判断 条件判断为基本式: 表达式如果不是false或nil,则可执行code部分,所以对于else来说,如果为false或nil,则else下的代码是要执行的。要注意的是表达式与执行代码之间要有分界符:例如换行或分号或是then关键字。 多条件分支情况下,除了可以用
本文向大家介绍C#基础知识之FileStream,包括了C#基础知识之FileStream的使用技巧和注意事项,需要的朋友参考一下 一、FileStream的基础知识 属性: CanRead 判断当前流是否支持读取,返回bool值,True表示可以读取 CanWrite 判断当前流是否支持写入,返回bool值,True表示可以写入 方法:
Socket 通常也称作"套接字",是支持 TCP/IP 协议的网络通信应用的基本操作单元,可以用来实现网间不同虚拟机或不同计算机之间的通信。使用TCP/IP协议的应用程序通过在客户端和服务器各自创建一个 Socket ,然后通过操作各自的 Socket 就可以完成客户端和服务器的连接以及数据传输的任务了。 Socket 的本质是编程接口( API ),是对 TCP/IP 的封装。使开发者不需要面
基础知识 基于 ruby 写的 官网文档:https://www.elastic.co/guide/en/logstash/5.2/first-event.html 如果是通过网络来收集,并不需要所有机子都装,但是如果是要通过读取文件来收集,那文件所在的那个机子就的安装 配置文件的写法格式:https://www.elastic.co/guide/en/logstash/5.2/configura