我们经常能看到ruby函数的参数前面有带*号,
def my_open(*args)
end
这是什么意思呢?
其实也很简单,它的意思是接收任意个参数,并把这些参数组装成一个
名称为args数组。
def my_open(*args)
puts(args.length)
end
my_open("test.rb","w")
我们可以看到输出的结果是2,这说明了args是一个带有两个元素的
|
(一)Ruby中一切都是对象,包括一个常数.
比如可以用.class属性来查看一个对象的类型,你可以看下1.class,会发现常数1的类型是Fixnum,1不过是Fixnum的一个实例。还可以使用-37这个Fixnum的实例方法abs来取得绝对值:-37.abs()会返回37
又如输入一个1.1.class,会返回Float。
(二)Ruby语法
Ruby中的类以class开始 以end结束,类名首字母的约定是大写。
Ruby中的方法以def开始 以end结束,方法名首字母的约定是小写。
Ruby中的局部变量名首字母的约定是小写。
Ruby中的构造函数名称为initialize。
Ruby中的成员变量(实例变量)前导@符,在initialize里进行声明与初始化。
Ruby中的属性用attr_writer和attr_reader声明,分别对应c#的set,get,使用了attr_accessor是可读也可写
Ruby中的全局变量前导$符。
Ruby中的常数(常量)用大写字母开头,约定是全部大写。
Ruby中任何的表达式都会返回值,sample
继续补充下attr_accessor的使用,sample
上面的代码说明了,在使用attr_accessor的时候,会寻找是否有同名的成员变量,如果有则访问同名成员变量,如果没有会默认创建一个前导@的成员变量
(三)神奇的操作符重载
Ruby支持操作符重载,而且很神奇!
神奇吧,其实把+号理解为一个函数的名字最好不过了,就像最后一个写法,哈哈。
(四)参数的传递
参数的传递中有默认值与可变长参数两个比较有特点的地方,其他语言有的,ruby也有。
1.参数的默认值
默认值的设置很简单,与其他语言一样,sample
看到了吧,使用默认值了
2.可选参数,可变长参数 sample
可以看出,可变长参数前缀*号,可变长参数的实质是一个Array,呵呵。
(一)类变量以及类方法
sample code
@@interestRate = 6.5
def BankAccount.getInterestRate()
@@interestRate
end
attr_accessor :balance
def initialize(bal)
@balance = bal
end
end
puts BankAccount.getInterestRate()
以上代码中描述了如何定义类变量以及如何访问类变量
Ruby的成员访问修饰关键字分为三种,与c#一样。 与c#不同的是,ruby的访问修饰符从定义处开始起作用,直到下一个访问修饰符出现时终止,比如 initialize默认就是private的 其他方法默认是public的 成员变量和类变量默认是private的 要用attr_reader或attr_accessor来增加读写控制
ruby除了支持class外还支持module,module的作用有两个: md5 sha1 base64 uri
1 private 只能为该对象所调用的方法
2 protected 只能为该对象及其子对象所调用的方法
3 public 可以让任何对象所调用的方法
def initialize
end
private
def sayhi()
puts "hi"
end
def saybye()
puts "bye"
end
public
def say()
sayhi
saybye
end
end
g = Greeter.new
g.say # output hi bye
g.sayhi # error because the sayhi isn't publics member
1 当作一组方法和常数的命名空间 防止命名冲突
2 可以被类mixin(混入),mixin module的类的实例则拥有了模块的方法。
不同的类混入了同样的模块,则可以拥有同样的功能,而无须去继承某个父类。
可以通过include一个module来实现c++中的多继承。
PI = 3.1415926
def calculate(diamiter)
return diamiter * PI
end
end
class Circular
include CircularModule
end
c = Circular.new
puts c.calculate(5) # output 15.707963
puts MD5.hexdigest('')
puts Digest::SHA1.hexdigest('')
code = Base64.encode64('hallo')
source = Base64.decode64(code)
code = URI.encode src
src = URI.decode code
puts code
puts src
GBK和UTF-8的转换
用GBK而不要用GB2312,因为GBK不仅包含简体中文,还包括繁体中文等,是一个大字符集。
我们经常能看到ruby函数的参数前面有带*号,
def my_open(*args)
end
这是什么意思呢?
其实也很简单,它的意思是接收任意个参数,并把这些参数组装成一个
名称为args数组。
def my_open(*args)
puts(args.length)
end
my_open("test.rb","w")
我们可以看到输出的结果是2,这说明了args是一个带有两个元素的
|
联系客服