什么是类<&书信电报;selfdo inRuby
首先是类<&书信电报;foo语法打开了foo的单例类(eigenclass)。这允许您专门化在该特定对象上调用的方法的行为
a='foo'
类<&书信电报;A.
def检查
“酒吧”
终止
终止
a、 检查#=>;“酒吧”
a='foo'#新对象,新单例类
a、 检查#=>;“福”
现在,回答问题:class<&书信电报;self打开self的单例类,以便可以为当前self对象(在类或模块主体内是类或模块本身)重新定义方法。通常,这用于定义类/模块(“静态”)方法:
类字符串
类<&书信电报;自己
obj的def值_
对象
终止
终止
终止
String.value_为42#=>;"42"
这也可以写成速记:
类字符串
定义obj的自我价值
对象
终止
终止
甚至更短:
obj的def String.value_
对象
终止
在函数定义内部时,self指调用函数的对象。在这种情况下,class<&书信电报;self打开该对象的单例类;它的一个用途是实现穷人的状态机:
类状态机示例
def过程obj
过程钩obj
终止
私有的
def过程状态1 obj
# ...
类<&书信电报;自己
别名进程\u挂钩进程\u状态\u 2
终止
终止
def过程状态2 obj
# ...
类<&书信电报;自己
别名进程\u挂钩进程\u状态\u 1
终止
终止
#设置初始状态
别名进程\u挂钩进程\u状态\u 1
终止
因此,在上面的示例中,StateMachineExample的每个实例都将process\u hook别名为process\u state\u 1,但请注意,在后者中,它如何将process\u hook(仅针对自身,不影响其他StateMachineExample实例)重新定义为process\u state\u 2。因此,每次调用方调用进程方法(调用可重新定义的进程_hook)时,行为都会根据其所处的状态而变化