ifClassName.exists?(["id=?",self.id])object=ClassName.find_by_name(self.name)object.update_attributes!(:street_address=>self.street_address,:city_name=>self.city_name,:name=>self.org_unit_name,:state_prov_id=>self.state_prov_id,:zip_code=>self.zip_code)elseClassName.create!:street_address=>self.
关于在模块或库中使用“SELF”的快速问题。基本上,“SELF”的范围/上下文是什么,因为它属于模块或库,如何正确使用它?有关我所说内容的示例,请查看随“restful_authentication”一起安装的“AuthenticatedSystem”模块。注意:我知道“self”在其他语言中等同于“this”,以及“self”如何在类/对象上运行,但是在模块/库的上下文中,“self”没有任何意义。那么在没有类的模块之类的东西中,self的上下文是什么? 最佳答案 在模块中:当您在实例方法中看到self时,它指的是包含该模块的类的
关闭。这个问题是opinion-based.它目前不接受答案。想改善这个问题吗?更新问题,以便可以通过editingthispost用事实和引文回答问题.3年前关闭。Improvethisquestion我不确定这里的最佳实践是什么,但我经常看到缩写的变量名,尤其是当范围很小的时候。所以(使用简单的Ruby示例)而不是defadd_location(name,coordinates),我看到类似defadd_loc(name,coord)的东西——我什至可能会看到类似defadd_loc(n,x,y)的东西.我想当人们习惯于看到缩写时,更长的名字可能会让他们感到疲倦。冗长是否有助于可读
这不是Rails特有的——我只是以Rails为例。我在Rails中有一个模型:classItem(假设Item模型(类)有一个名为name的方法。)我什么时候需要使用self.name我什么时候可以只使用name(例如,#{name})? 最佳答案 在调用方法时更喜欢省略self.是惯用的;通常不需要。调用setter方法时,您必须使用self.foo=xxx,而不是foo=xxx,以便Ruby意识到您没有尝试创建新的局部变量。同样,如果您有一个与方法同名的现有局部变量do_something,这不太可能发生,您必须使用self.d
extendself和module_function是实现它的两种ruby方法,因此您可以在模块上调用方法,如果包含该模块也可以调用它。这些方式的最终结果有什么不同吗? 最佳答案 module_function将给定的实例方法设为私有(private),然后复制并将它们作为公共(public)方法放入模块的元类中。extendself将所有实例方法添加到模块的单例中,保持它们的可见性不变。moduleMextendselfdefa;endprivatedefb;endendmoduleNdefc;endprivatedefd;e
在Rails模型中测试getter/setter对时,我发现了一个很好的行为示例,我一直认为这种行为很奇怪且不一致。在这个例子中,我处理的是classFolder.Folderbelongs_to:parent,:class_name=>'Folder'在getter方法上,如果我使用:defparent_nameparent.nameend……或者……defparent_nameself.parent.nameend...结果完全一样,我得到了父文件夹的名称。但是,在getter方法中,如果我使用...defparent_name=(name)parent=self.class.fi
classExampleprivatedefexample_testputs'Hello'endende=Example.newe.example_test这当然行不通,因为我们指定了显式接收者-Example(e)的实例,这违反了“私有(private)规则”。但我不明白,为什么不能在Ruby中这样做:classFoodefpublic_mself.private_m#public_m方法定义中的当前对象(即self)是Foo的实例。那么为什么不允许呢?要解决这个问题,我必须将self.private_m更改为private_m。但为什么这不同,self不是public_m中的Foo
我有几条具有给定属性的记录,我想找出标准差。我该怎么做? 最佳答案 moduleEnumerabledefsumself.inject(0){|accum,i|accum+i}enddefmeanself.sum/self.length.to_fenddefsample_variancem=self.meansum=self.inject(0){|accum,i|accum+(i-m)**2}sum/(self.length-1).to_fenddefstandard_deviationMath.sqrt(self.sample_v
谁能给我解释一下在方法定义中添加self是什么意思?是不是类似于java中的this关键字? 最佳答案 与其他语言不同,Ruby没有类方法,但它有附加到特定对象的单例方法。cat=String.new("cat")defcat.speak'miaow'endcat.speak#=>"miaow"cat.singleton_methods#=>["speak"]defcat.speak创建附加到对象cat的单例方法。当你写classA时,它等同于A=Class.new:A=Class.newdefA.speak"I'mclassA"e
这RubyStyleGuide告诉我们最好使用self.method_name而不是classmethod_name。但是为什么?classTestClass#badclass是否存在性能问题? 最佳答案 class善于将所有类方法放在同一个block中。如果在defself.method中添加方法form则不能保证(除了惯例和一厢情愿的想法)不会有额外的类方法隐藏在文件的后面。defself.method擅长显式声明方法是类方法,而使用class你必须自己去找容器。这些中哪一个对您来说更重要是一个主观决定,并且还取决于诸如有多少其