草庐IT

c++ - 在类初始化和初始化列表中

全部标签

ruby-on-rails - 是否可以在 Rails 中的两个日期之间创建月份列表

我正在尝试创建一个页面来显示每个月的链接列表,按年分组。月份需要介于今天和第一个条目的日期这两个日期之间。我在一堵砖墙前,我不知道如何创建它。我们将不胜感激任何帮助问候亚当 最佳答案 只需将您想要的内容放入范围循环中,然后像这样使用Date::MONTHNAMES数组(date.year..laterdate.year).eachdo|y|mo_start=(date.year==y)?date.month:1mo_end=(laterdate.year==y)?laterdate.month:12(mo_start..mo_end

c - Ruby C 扩展开发人员的命名约定

在用C为ruby​​编写扩展时,我对遵循正确的命名约定很感兴趣。具体来说,我指的是将_p添加到谓词的函数名称以及为变量添加前缀m代表模块,c代表类等等。例如,如果我们想在C语言中定义一个像下面这样的谓词方法,我们应该在定义该方法的函数中使用_p作为后缀。classMyClassdefawesome?trueendend在C中:staticVALUEmy_extension_my_class_awesome_p(VALUEself){returnQtrue;}voidInit_my_extension(void){VALUEcMyClass=rb_define_class("MyClas

ruby - 为什么在初始化时不使用 setter 方法?

最近我一直在阅读“Ruby中的实用面向对象设计”,我注意到最佳实践之一是使用访问器方法而不是直接获取@instance_variable。例如:classFooattr_accessor:bardefinitialize(my_argument)@bar=my_argumentend#bad#deflorem_ipsum#@bar*999#end#gooddeflorem_ipsumbar*999endend让事情保持干燥是有意义的,并且,以防万一我需要在实际获取它的值之前以某种方式处理@bar。但是,我注意到initialize方法直接设置了@bar实例变量的值:classFooat

ruby - 在 Mixins 中初始化实例变量

是否有任何干净的方法来初始化旨在用作Mixin的模块中的实例变量?例如,我有以下内容:moduleExampledefon(...)@handlers||={}#dosomethingwith@handlersenddefall(...)@all_handlers||=[]#dosomethingwith@all_handlersenddefunhandled(...)@unhandled||=[]#dosomethingwithunhandledenddefdo_something(..)@handlers||={}@unhandled||=[]@all_handlers||=[]#

ruby - 仅当前类的实例方法列表

我有一个O类的实例o。我想知道o的功能。o.methods会给我很多方法。所以我通常做o.methods-Object.instance_methods。但这并不简洁。我想做类似o.methods-o.class.superclass.instance_methods的事情。也就是说,只有O本身定义的方法。还有其他办法吗? 最佳答案 您可以使用方法Module#instance_methods:o.class.instance_methods(false)警告文档似乎是错误的,它说:Withnoargument,orwithanar

ruby 1.9.3 不能使用 open3(未初始化的常量 ConfigureController::Open3)

该项目在Ruby1.9.2中运行良好,但我想使用1.9.3。此行在1.9.2中运行良好:o,e,s=Open3.capture3("echoa;sort>&2",:stdin_data=>"foo\nbar\nbaz\n")但是在1.9.3中,我得到了未初始化常量ConfigureController::Open3我必须安装模块还是什么?谢谢! 最佳答案 您是否在源文件的顶部require'open3'?有可能之前,它是您需要的其他东西所必需的,但现在在1.9.3中则不是。您可能需要明确要求它。

ruby-on-rails - 如何从初始化器扩展一个类并在开发环境中重新加载它?

我通过包含一个模块来扩展一个类(在插件中),这是在初始化程序中完成的。require'qwerty/core/user'User.send:include,Qwerty::Core::Extensions::User但是在开发过程中,在每次请求之前(以及在控制台中调用reload!之后)所有模型都会重新加载,但由于初始化器不会再次运行,所以模块不包含在内。留下带有“缺失部分”的模型。因为模型在插件中,所以将代码直接包含在类中似乎不是明智的做法,这将是通常的方法。现在我只是简单地添加了一个before_filter,它包含了开发环境中的模块。但是我有复制/粘贴并且在初始化程序和应用程序C

ruby Rspec。获取所有测试的列表

我在Rspec上做了一些测试,看起来像这样:describe"description"dobefore:eachdodo_before()endit"something_1"do...endit"something_2"do...endend我知道我可以使用获取当前测试的名称(“something_1”)example.description有什么方法可以获取before:each区域中所有描述的数组吗? 最佳答案 rspec-fd--color--dry-runfilename在rspec3.5.2中为我工作,列出所有测试而不运行

ruby - 是否可以根据单个对象对方法的响应对对象列表进行排序?

我想显示一个产品的画廊,其中包括待售和非待售产品。只是我想让待售的产品出现在列表的前面,而不是待售的对象出现在列表的末尾。我实现此目的的一种简单方法是制作两个列表,然后合并它们(一个列表是on_sale?对象,另一个列表是非on_sale?对象):available_products=[]sold_products=[]@products.eachdo|product|ifproduct.on_sale?available_products...但是对于我现有应用程序的结构来说,由于我的代码中有一个奇怪的地方,这将需要过多的重构(我失去了分页,我宁愿不重构)。如果有一种方法可以通过我的

ruby - 用 block 初始化对象

是否可以像下面这样用block初始化一个对象?classFooattr_reader:bar,:bazdefinitialize(bar,baz)@bar,@baz=bar,bazendendFoo.newdo|bar,baz|#somelogictobeimplemented#@bar,@baztobeassignedend 最佳答案 当然,你可以在initialize中yield,这没什么特别的:classFooattr_accessor:bar,:bazdefinitializeyieldselfendendFoo.newdo