草庐IT

self-modifying

全部标签

ruby - 顶级方法中 `self` 的规则是什么?

如果我在Ruby文件中定义一个顶级方法,self的值似乎在很大程度上取决于调用它的人。defwho_am_iputsself.inspectendclassAdefself.foowho_am_ienddeffoowho_am_iendenddeffoowho_am_iendfoo#>>mainA.foo#>>AA.new.foo#>>#显然,如果一个方法是在一个类中定义的,self要么是类本身(对于类方法),要么是该类的相关实例(例如方法)。似乎,根据上面显示的试验,类中定义的方法not从其调用者继承self,但我找不到任何官方引用或任何东西支持这一点。有人可以提供描述这种行为的官方

ruby - 在 Ruby 中,self.user_name 与@user_name 不一样吗?

在Ruby中,不是像@foo这样的实例变量和@@bar这样的类变量吗?在一些代码中,我看到了一些self.user_name=@name甚至a+=1ifname!=user_name#thistime,withoutthe"self."#anditisthefirstlineofamethodso#itdoesn'tlooklikeitisalocalvariableself是为了什么?我认为它可能是一个访问器,但它不能只是user_name而不是self.user_name吗?而且我什至没有看到任何使其成为访问器的代码,例如attr_accessor,而且也不在基类中。

ruby-on-rails - Self.find 方法 Active Model in Rails 不起作用

我目前使用的是API而不是数据库,我想尽可能接近ActiveRecord,所以我决定继续并完全像这里的railscast:http://railscasts.com/episodes/219-active-model到目前为止,我的保存方法运行良好,因此我可以将数据保存到API。我的问题出在编辑上,我的查找方法似乎是问题所在...这是一些代码!在我的Controller中编辑方法defedit@parking=Parking.find(params[:id])end整个模型classParkingincludeActiveModel::ValidationsincludeActiveM

ruby-on-rails - alias_method、alias_method_chain 和 self.included

我在理解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这正是我想要的-将

ruby - 一次给setter赋多个值 : self. x = (y, z) 导致语法错误

我正在尝试使用两个参数-标题和作者来定义类方法。当我尝试传递参数时出现参数错误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_

Ruby - 在类方法中引用 self

在RubyMonk上查看这段代码:classItemdefinitialize(item)@item=itemenddefshowputs"Theitemnameis:#{self}"enddefto_s"#{@item}"endendItem.new("potion").show代码通过了,但是self变量的使用对我来说有点模棱两可。您可以在show方法中轻松地将to_s替换为self并获得相同的结果。有人可以解释两种插值之间的区别以及为什么/如何在这里使用self吗?此外,如果没有方法to_s,代码将返回一个代理。这里定义to_s有什么意义呢? 最佳答案

ruby - 考虑 Ruby 中的 'self' 关键字的正确方法是什么?

关于self的语义,更合适的说法是:self是一个关键字,它包含对当前接收者的引用。self是Ruby中唯一的接收者。当您调用方法或调用类定义时,绑定(bind)到self的值将成为绑定(bind)到该对象的值的副本。按值,我的意思是unsignedlongVALUE换句话说,说myObj是消息的实际接收者是否准确,或者说self是真正的接收者和的副本绑定(bind)到myObj变量名的unsignedlongVALUE变量值是否绑定(bind)到self变量名?在后一种情况下,您只能说self正在接收一条消息,但是self和myObj碰巧引用相同的消息目的。(self始终是当前对象)

ruby - "class<<self"与 "extend ClassMethods"

创建类方法(没有明显的“defself.method”)的两种主要技术是:在“class定义ClassMethod模块并稍后对其进行扩展我个人更喜欢第二种方式,看起来更干净。有没有人有任何理由更喜欢一种技术而不是另一种?还有“class_method”方法,但我从未使用过它,它的实现相当复杂,而且似乎比前两个做的更多。 最佳答案 self.method当您只需要创建一个没有依赖关系或相关逻辑的方法时,这是最简单的选择。class允许您做的远不止是在元类上定义方法。这在您定义需要与元类的其他部分一起使用的方法时很有用(例如,为现有方法

ruby - Cucumber 步骤定义中的实例变量(即什么是 self)在起作用?

在Ruby中使用Cucumber时,我不理解作用域,尤其是在实例变量方面。对于我的直接示例的上下文,在hooks.rb的Before部分中,变量@browser被赋值。@browser=Watir::Browser.new@browser_selected.to_sym(其中@browser_selected通常是“chrome”)在步骤定义中使用@browser。举个简单的例子:@browser.send_keys(:tab)我不明白的是什么对象包含@browser作为属性。它在这种情况下有什么意义?我知道令我困惑的代码总是在一个block中,并且我认识到每个这样的block都用于(

ruby - class << self 中的 self 是什么,为什么这与定义此代码块的 Class 实例不同?

下面的代码尝试创建一个MyClass类,该类将对方法self.add的调用委托(delegate)给调用方法self.newAdd返回的对象。classMyAdddefadd(a,b)a+bendendclassMyClassdefself.newAddMyAdd.newenddefself.delegate(*methods,options)returnunlessoptions.has_key?(:to)methods.eachdo|method|define_methodmethod,->(*args,&prc)dodelegated_to=self.send(options[: