众所周知,在实现赋值运算符时,必须防止自赋值,至少当类具有非POD成员时。通常是(或等价于):Foo&operator=(constFoo&other){if(&other==this)return*this;...//Docopy}没有自动插入自赋值保护的原因是什么?是否存在self分配做一些重要且实用的事情的用例?Foo&operator=(constFoo&other){if(&other==this){//Dosomethingnon-trivial}else{//Docopy}return*this;}现在总结一下答案和讨论看起来非平凡的self分配永远不会真正有用。提出的唯
众所周知,在实现赋值运算符时,必须防止自赋值,至少当类具有非POD成员时。通常是(或等价于):Foo&operator=(constFoo&other){if(&other==this)return*this;...//Docopy}没有自动插入自赋值保护的原因是什么?是否存在self分配做一些重要且实用的事情的用例?Foo&operator=(constFoo&other){if(&other==this){//Dosomethingnon-trivial}else{//Docopy}return*this;}现在总结一下答案和讨论看起来非平凡的self分配永远不会真正有用。提出的唯
我想访问其父类(superclass)中的类名MySuperclass'self.inherited方法。它适用于classFoo定义的具体类但是在使用匿名类时失败了。我倾向于避免在测试中创建(类)常量;我希望它能与匿名类一起使用。给定以下代码:classMySuperclassdefself.inherited(subclass)super#workwithsubclass'nameendendklass=Class.new(MySuperclass)dodefself.name'FooBar'endendklass#name仍将是nil什么时候MySuperclass.inheri
如果我在Ruby文件中定义一个顶级方法,self的值似乎在很大程度上取决于调用它的人。defwho_am_iputsself.inspectendclassAdefself.foowho_am_ienddeffoowho_am_iendenddeffoowho_am_iendfoo#>>mainA.foo#>>AA.new.foo#>>#显然,如果一个方法是在一个类中定义的,self要么是类本身(对于类方法),要么是该类的相关实例(例如方法)。似乎,根据上面显示的试验,类中定义的方法not从其调用者继承self,但我找不到任何官方引用或任何东西支持这一点。有人可以提供描述这种行为的官方
在Ruby中,不是像@foo这样的实例变量和@@bar这样的类变量吗?在一些代码中,我看到了一些self.user_name=@name甚至a+=1ifname!=user_name#thistime,withoutthe"self."#anditisthefirstlineofamethodso#itdoesn'tlooklikeitisalocalvariableself是为了什么?我认为它可能是一个访问器,但它不能只是user_name而不是self.user_name吗?而且我什至没有看到任何使其成为访问器的代码,例如attr_accessor,而且也不在基类中。
我目前使用的是API而不是数据库,我想尽可能接近ActiveRecord,所以我决定继续并完全像这里的railscast:http://railscasts.com/episodes/219-active-model到目前为止,我的保存方法运行良好,因此我可以将数据保存到API。我的问题出在编辑上,我的查找方法似乎是问题所在...这是一些代码!在我的Controller中编辑方法defedit@parking=Parking.find(params[:id])end整个模型classParkingincludeActiveModel::ValidationsincludeActiveM
我在理解alias_method/alias_method_chain时遇到一点困难。我有以下代码:moduleActionView::HelpersmoduleFormHelperalias_method:form_for_without_cherries,:form_fordefform_for(record,options={},&proc)output='withacherryontop'.html_safeoutput.safe_concatform_for_without_cherries(record,options={},&proc)endendend这正是我想要的-将
我正在尝试使用两个参数-标题和作者来定义类方法。当我尝试传递参数时出现参数错误syntaxerror,unexpected',',expecting')'book.set_title_and_author=("Ender'sGame","OrsonScottCard")classBookdefset_title_and_author=(title,author)@title=title@author=authorenddefdescription"#{@title}waswrittenby#{@author}"endendbook=Book.newbook.set_title_and_
在RubyMonk上查看这段代码:classItemdefinitialize(item)@item=itemenddefshowputs"Theitemnameis:#{self}"enddefto_s"#{@item}"endendItem.new("potion").show代码通过了,但是self变量的使用对我来说有点模棱两可。您可以在show方法中轻松地将to_s替换为self并获得相同的结果。有人可以解释两种插值之间的区别以及为什么/如何在这里使用self吗?此外,如果没有方法to_s,代码将返回一个代理。这里定义to_s有什么意义呢? 最佳答案
关于self的语义,更合适的说法是:self是一个关键字,它包含对当前接收者的引用。self是Ruby中唯一的接收者。当您调用方法或调用类定义时,绑定(bind)到self的值将成为绑定(bind)到该对象的值的副本。按值,我的意思是unsignedlongVALUE换句话说,说myObj是消息的实际接收者是否准确,或者说self是真正的接收者和的副本绑定(bind)到myObj变量名的unsignedlongVALUE变量值是否绑定(bind)到self变量名?在后一种情况下,您只能说self正在接收一条消息,但是self和myObj碰巧引用相同的消息目的。(self始终是当前对象)