【Ruby学习笔记】5:方法的使用和特性

方法定义和使用

Ruby中的方法需要在调用之前定义,并且首字母小写。

#!/usr/bin/ruby
def myFun(a="lzh",b="sb")
    puts("#{a} is a #{b}")
end

i="who"
j="cat"
myFun(i,j)
myFun()
[lzh@hostlzh Ruby]$ ruby 4.rb
who is a cat
lzh is a sb
[lzh@hostlzh Ruby]$

默认返回值

Ruby中的方法默认返回最后一条语句的执行结果值。

#!/usr/bin/ruby
def myFun(a="lzh",b="sb")
    puts("#{a} is a #{b}")
    @c="返回值"
end

i="who"
j="cat"
retval=myFun(i,j)
puts(retval)

如果这条语句不涉及什么结果呢?返回的是nil。

#!/usr/bin/ruby
def myFun(a="lzh",b="sb")
    puts("#{a} is a #{b}")
end

i="who"
j="cat"
retval=myFun(i,j)
puts(retval)
[lzh@hostlzh Ruby]$ ruby 4.rb
who is a cat
nil
[lzh@hostlzh Ruby]$

设定返回值

和其它高级语言一样,可以用return语句去改变方法的返回值,同时会导致方法的结束。return多个值时,返回的是包含它们的数组。

#!/usr/bin/ruby
def myFun(a="lzh",b="sb")
    puts("#{a} is a #{b}")
    @c="我还是返回值吗"
    puts("第5行执行了吗")
    return a,b
    puts("第7行执行了吗")
end

i="who"
j="cat"
retval=myFun(i,j)
puts(retval)
[lzh@hostlzh Ruby]$ ruby 4.rb
who is a cat
第5行执行了吗
who
cat
[lzh@hostlzh Ruby]$

可变参数

这一点和python用法很像,和使用数组一样去使用这些参数。

#!/usr/bin/ruby
def myFun(*a)
    puts("a是#{a}")
    puts("a的长度是#{a.length}")
    #循环地去使用它
    for i in 0...a.length: #用'...'以不包含a.length这个越界下标
        print("a[#{i}]=#{a[i]}")
    puts
    end
end

myFun(36,"lzh",'%',-7.38)
[lzh@hostlzh Ruby]$ ruby 4.rb
a是36lzh%-7.38
a的长度是4
a[0]=36
a[1]=lzh
a[2]=%
a[3]=-7.38
[lzh@hostlzh Ruby]$

类方法与实例方法

和java的思想非常像,在语法上Ruby的类方法要用类名.方法名来定义。

#!/usr/bin/ruby
class MyClass
    @@cls_var="class variable" #类变量
    def initialize(name)
        puts("你用\"#{name}\"作为参数构造了一个对象")
    end
    def MyClass.cls_mthd() #类方法
        puts("i am class method")
        puts("can i use #{@istc_var} ?") #打印不出来,说明不能使用
        puts("i can use #{@@cls_var}")
        puts
    end
    def istc_mthd() #实例方法
        @istc_var="instance variable" #实例变量
        puts("i am instance method")
        puts("i can use #{@istc_var}")
        puts("i can use #{@@cls_var}")
        puts
    end
end

liusb=MyClass.new("lzh")
liusb.istc_mthd() #使用实例方法
MyClass.cls_mthd() #直接使用类方法

在类加载时就有类方法和类变量了,而没有实例方法和实例变量,所以在类方法里是不能使用它们的(不过竟然也不会报错)。

[lzh@hostlzh Ruby]$ ruby 4.rb
你用"lzh"作为参数构造了一个对象
i am instance method
i can use instance variable
i can use class variable

i am class method
can i use  ?
i can use class variable

[lzh@hostlzh Ruby]$
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值