jjzjj

self-invoking-function

全部标签

Ruby module_function,调用模块的私有(private)方法,在模块的类方法样式中调用显示错误

test_module.rbmoduleMyModuledefmodule_func_aputs"module_func_ainvoked"private_bendmodule_function:module_func_aprivatedefprivate_bputs"private_binvoked"endendclassMyClassincludeMyModuledeftest_modulemodule_func_aendend从类中调用模块函数c=MyClass.newc.test_module输出1:$rubytest_module.rbmodule_func_ainvoked

ruby - 在 object.initialize 中,使用 self 是不是更好。超过 @?

有一种约定,在可能的情况下,通过对象的实例变量来引用对象的属性。PracticalObject-OrientedDesigninRuby说:Alwayswrapinstancevariablesinaccessormethodsinsteadofdirectlyreferringtovariables...这显示了一个例子,我已经释义了:classGearattr_reader:chainring,:cog...defratio#thisisbad#@chainring/@cog.to_f#thisisgoodchainring/cog.to_fend我看到使用实例变量创建新对象的最常

ruby - 如何像 instance_eval 方法那样在一个 block 中改变 self 呢?

instance_eval方法在其block中改变自身,例如:classD;endd=D.newd.instance_evaldoputsself#printsomethinglike#,not'main'!end如果我们自己定义一个方法(或任何其他方法(除了instance_eval)需要一个block),当打印self时,我们将得到'main',这与instance_eval方法不同。例如:[1].eachdo|e|putsself#print'main'end我如何定义一个像instance_eval这样的方法(需要一个block)?提前致谢。 最佳答

ruby-on-rails - 不理解类、模块和类 << self 方法

我有以下代码:classMyClassmoduleMyModuleclass当我调用方法时myfunction像这样,它工作正常:>me=MyClass::MyModule.myfunction=>"Nathan">me=>"Nathan"但是如果我删除了class并添加self.myfunction的前缀,它不起作用。例如:classMyClassmoduleMyModuleattr_accessor:first_namedefself.myfunctionMyModule.first_name="Nathan"endendend>me=MyClass::MyModule.myfun

ruby - Capistrano 错误:<Rake::Task load:defaults => []>:Rake::Task 的未定义方法 `already_invoked'

我花了太多时间调试它,但我不知道发生了什么。“capproductiondeploy”今天早上运行良好,现在它只是抛出一个错误。令人惊讶的是,谷歌到目前为止并没有太大帮助。据我所知,代码库没有任何变化:➜sesac-mm-matchinggit:(deploy)capproductiondeploy--trace**Invokeproduction(first_time)**Executeproductioncapaborted!NoMethodError:undefinedmethod`already_invoked'for[]>:Rake::Task/Users/***/.rvm/

ruby - "const_missing"定义中缺少常量和 "class << self"

在定义const_missing时,我对Ruby的行为感到非常困惑和class中的其他类方法定义而不是使用defself.foo句法。我正在尝试做这样的事情:classFooclass我主要使用class定义类方法的语法。但是,它没有按预期工作。const_missing永远不会被调用。以上结果导致NameError。像这样定义这两种方法按预期工作:defself.fooputsMISSINGenddefself.const_missing(name)puts"#{name}missing"end我认为classsyntax只是定义类方法的另一种方式,但完全等同于defself.foo

Ruby 在没有显式包含声明的情况下在子类上执行 self.included(base) 方法?

我有许多继承自一个父类(superclass)的类。作为模块定义的父类(superclass)。模块内部是一个设置一些实例变量的self.included(base)方法。所以像这样:moduleMyModuledefself.included(base)base.instance_variable_set("@my_instance_variable",{})endendclassMySuperClassincludeMyModuleendclassClassA除非我明确地将MyModule包含在ClassA和ClassB中,否则我的实例变量将不会在这两个类中设置。有没有办法确保在每

ruby-on-rails - Rails 3.1 与 PostgreSQL : GROUP BY must be used in an aggregate function

我正在尝试加载按user_id分组并按created_at排序的最新10个艺术。这适用于SqlLite和MySQL,但在我的新PostgreSQL数据库上出错。Art.all(:order=>"created_atdesc",:limit=>10,:group=>"user_id")ActiveRecord错误:ArtLoad(18.4ms)SELECT"arts".*FROM"arts"GROUPBYuser_idORDERBYcreated_atdescLIMIT10ActiveRecord::StatementInvalid:PGError:ERROR:column"arts.i

ruby - 为什么 self.class === MyClass 返回 false,而 self.class == MyClass 返回 true?

我正在使用Ruby的case语法来设置一些基于self.class的简单逻辑,如下所示:caseself.classwhenFirstClassdostuff....whenSecondClassdootherstuff...end我很快意识到这总是返回nil。经过仔细调查,我发现case使用===而不是==检查是否相等。在我的终端中运行self.class==FirstClass时,我按预期得到true,但是self.class===FirstClass返回假的。查看ruby​​文档,我找到了followingexplanation===:CaseEquality–ForclassO

ruby - 在类方法中使用和不使用 self 调用 Ruby 类方法有什么区别吗?

我有点好奇,下面这两种方法有什么区别吗?使用self在类方法中调用类方法classTestdefself.fooputs'Welcometoruby'enddefself.barself.fooendendTest.bar#欢迎使用ruby​​在没有自身的类方法中调用类方法classTestdefself.fooputs'Welcometoruby'enddefself.barfooendendTest.bar#欢迎使用ruby​​ 最佳答案 是的,有区别。但不是在你的例子中。但是,如果foo是一个private类方法,那么您的第一