ruby元编程(附录)
拟态方法
拟态方法就是去掉括号调用方法的方式,会给ruby开发者带来很多语法糖,当然也会给开发者和ruby本身增加很多容易混淆的场景。
如下场景中ruby无法知道name是局部变量还是(给@name赋值)拟态方法,按处理优先级ruby会把它当做局部变量处理
class C
attr_accessor :name
def initialize
# 两种可能
# 1、给局部变量name赋值(高优先级)
# 2、调用拟态方法name=(低优先级)
name = "lang"
end
end
puts C.new.name#=> nil
为了去除二义性,在调用拟态方法时应该加上
self
,明确告诉ruby当做拟态方法处理class C
attr_accessor :name
def initialize
self.name = "lang"
end
end
puts C.new.name#=> "lang"
空指针保护
a ||= [] #=> 如果a为nil则将a初始化为空数组,否则什么也不做
具名参数 【ruby元编程(附录)】当调用一个方法时,不得不按照固定的顺序传入参数,当参数很多时就会很容易出错。在ruby中可以使用键值序列来当做参数传入,这些参数会被包装成一个hash传入
缺点是要自己从hash中取出需要的参数,并且单从方法定义来看无法看到完整的参数列表
def my_method(args)
puts args[:a]#=> 1
end
my_method(:a => 1, :b => 2, :c => 3)
#在ruby 1.9以后也可以这样写
my_method(a:1, b:2, c:3)
推荐阅读
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 我用芋圆和芋饺祝大家元宵节快乐
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Java|Java基础——数组
- 默示录【二】
- 关于Ruby的杂想
- 我有一个小姑娘:童言童语
- HTML基础--基本概念--跟着李南江学编程
- 问(现在多少家产相当于30年前的万元户())
- 克里希那穆提《生命书》新译(8月15日)(心与念的二元分裂)