Ruby 通常用 def 关键字定义方法,在 def 之后是新方法的名称,紧接着是方法体。
语法如下:
def method_name [( [arg [= default]]...[, * arg [, &expr ]])]
expr..
end
简单方法:
def method_name
expr..
end
带参数方法:
def method_name (var1, var2)
expr..
end
参数带默认值:
def method_name (var1=value1, var2=value2)
expr..
end
可变数量的参数:
def method_name (*var)
for i in 0... var.length
puts "#{var[i]}"
end
end
ruby 中的 return 语句用于从 ruby 方法中返回一个或多个值。
语法:
return [expr[`,' expr...]]
# 单返回值
return value1
# 多返回值
return value1, value2
Ruby 中的每个方法默认都会返回一个值。这个返回的值是最后一个语句的值。也就是说不写 return 也会拿到值,如下所示:
def method_name
"YJ"
end
puts method_name
不过为了程序更加具有阅读性,建议写 return。
使用元编程特性,还能用另外的方式定义方法。
class Quote
def display
puts "Ruby's normal method definition process."
end
end
在程序中使用 def 关键字定义新方法,Ruby 会遵循下面三个步骤。
class Quote
def self.display
puts "Defining class methods using an object prefix."
end
end
如果调用 Quote.class,则会返回 Class。所有的类本质上都是 Class 类的实例。元类是内部的概念,通常对 Ruby 程序来说是不可见的。
class Quote
class << self
def display
puts "Defining class methods using a new lexical scope."
end
end
end
class Quote
end
some_quote = Quote.new
def some_quote.display
puts "Defining class methods using Singleton classes."
end
在内部,Ruby 使用了被称为单类的隐藏类来实现这种行为,这就好比是单个对象的元类。区别如下:
class Quote
end
some_quote = Quote.new
class << some_quote
def display
puts "Defining methods using Singleton classes in a lexical scope."
end
end
some_quote.display
时间 | 描述 |
---|---|
2017-07-27 | 博文完成 |
CSDN:http://blog.csdn.net/y550918116j
GitHub:https://github.com/937447974