在上一期冻结对象教程中,我们研究了在Ruby中冻结对象的方法。我们不能为冻结的对象分配单例方法,但是什么是单例方法,它们具有什么属性以及如何创建它们?在本文其余的内容中,您将获得所有上述问题的答案。成功阅读本教程后,您将非常了解了解Ruby中的Singleton方法所必需的内容。
我们知道对象的行为由它所属的类决定。它只是意味着实例将能够调用该特定类中定义的方法。但是有时候我们希望我们的对象应该具有某些独特的行为,或者我们的对象应该具有其他同类对象不具有的方法。在这种情况下,单例方法就出现了。在图形用户界面中使用单例方法,其中在不同按钮的click事件中执行不同的操作。在Ruby中,我们有特权向对象提供其方法,或者可以说我们可以在Ruby中定义单例方法。
为了更好地理解该概念,让我们在说明程序代码的帮助下对此进行理解。
范例1:
=begin Ruby program to demonstrate singleton methods =end class Example def prnt puts "Go Corona! Corona Go!" end end object1 = Example.new object2 = Example.new def object2.prnt puts "Corona bhag jaa!" end puts "singleton method demonstration" puts "Invoke from object1:" object1.prnt puts "Invoke from object2:" object2.prnt
输出结果
singleton method demonstration Invoke from object1: Go Corona! Corona Go! Invoke from object2: Corona bhag jaa!
说明:
在上面的代码中,您可以看到我们已经为Example类的object2重新定义了方法prnt。该prnt方法不过是对对象2表现不同的单例方法。
范例2:
=begin Ruby program to demonstrate singleton methods =end object1 = String.new object1 = "includehelp" object2 = String.new object2 = "hrithik" def object2.size return "Corona bhag jaa!" end puts "singleton method demonstration" puts "Invoke from object1:" puts object1.size puts "Invoke from object2:" puts object2.size
输出结果
singleton method demonstration Invoke from object1: 11 Invoke from object2: Corona bhag jaa!
说明:
在上面的代码中,您可以观察到我们可以为属于库类的对象定义单例方法。我们的代码不是打印object2的大小,而是打印“ Corona bhag jaa!”,因为这是由该方法返回的。