草庐IT

c++ - std::map 可以在调用 const 函数期间重新平衡吗?

全部标签

c - (U) Ruby 扩展 : rb_gc_mark() and instance variables

我正在编写定义类的ruby​​扩展。如果我使用Data_Wrap_Struct()来实现我对rb_define_alloc_func()的回调,我是否需要手动标记和释放实例变量?还是仍然为我处理? 最佳答案 Ruby的GC将收集在您的Ruby对象的实例变量中引用的所有Ruby对象。您不必也不应该自己释放Ruby实例变量(即在您的扩展中使用rb_iv_set()/rb_iv_get()访问的任何对象)。但是,如果包装的Cstruct引用Ruby对象,那么您必须在传递给Data_Wrap_Struct()的mark回调中标记这些对象。(

ruby - 我可以让 ruby​​ 打印动态方法的源代码吗?

我调查了gettingthesourcecodeofamethod如果它作为文件存在,但没有此文件引用,是否可以动态打印方法的源代码?看来我可以使用self.methods和每个方法的.arity访问类中的方法签名。我相信ri_forgem指的是原始源文件。提出这个问题的更好方法是:如果一个类在运行时被扩展,它的源代码是否安全,不会被调查?或者调查的能力是否仅限于方法签名和实例变量的名称,也许是类变量?编辑:我使用的解决方案:http://seattlerb.rubyforge.org/svn/ruby2ruby/1.2.1/lib/ruby2ruby.rbclassRuby2Ruby

ruby-on-rails - 什么时候 block 比函数更有用(ruby)?

我有两个给出相同结果的例子。带block:defself.do_something(object_id)self.with_params(object_id)do|params|some_stuff(params)endenddefself.with_params(object_id,&block)find_object_by_idcalculate_params_hashblock.call(params_hash)end和方法:defself.do_something(object_id)some_stuff(self.get_params(object_id))enddefsel

ruby-on-rails - Foreman无法启动Nginx,但我可以手动启动。为什么?

我目前正在运行Foreman在暂存(Ubuntu)上,一旦我开始工作,就会切换到使用upstart。我的Procfile.staging看起来像这样:nginx:sudoservicenginxstartunicorn:bundleexecunicorn-c./config/unicorn.rbredis:bundleexecredis-serversidekiq:bundleexecsidekiq-v-C./config/sidekiq.yml我可以使用以下方法成功启动nginx:$sudoservicenginxstart然而,当我运行$foremanstart时,当其他三个进程成

ruby - 如何在 YARD 中记录一个参数数量可变的函数?

我有一个函数,它接受可变数量的参数,如下所示:defmyfun(*args)#...end所有参数都是同一类型(Symbol),所以现在我记录函数就像只有一个参数一样,说它可以接受多个参数,例如:#thisfunctiondoesn’tdoanything#@param[Symbol]:thisargumentdoessomething,youcanaddmoresymbols#ifyouwantdefmyfun(*args)#...end是否有内置方法来处理这种情况? 最佳答案 以下是有道理的,因为args是方法内部的一个Arra

ruby - `map` 是否使用 `each`?

在Ruby中,Enumerable模块混合到集合类中,并依赖于提供each方法的类,该方法产生集合中的每个项目。好吧,如果我想在我自己的类中使用Enumerable,我将只实现each[1]:classColorsincludeEnumerabledefeachyield"red"yield"green"yield"blue"endend>c=Colors.new>c.map{|i|i.reverse}#=>["der","neerg","eulb"]这按预期工作。但是,如果我用Enumerable重写现有类上的each方法,它不会破坏map等函数。为什么不呢?classArrayde

c - 如何处理 ruby​​ ffi gem 中的 ruby​​ 数组?

我想使用ruby​​ffigem调用一个c函数,该函数将一个数组作为输入变量,输出是一个数组。也就是说,c函数看起来像:double*my_function(doublearray[],intsize)我创建了ruby​​绑定(bind):moduleMyModuleextendFFI::Libraryffi_lib'c'ffi_lib'my_c_lib'attach_function:my_function,[:pointer,int],:pointer我想用ruby​​代码调用:result_array=MyModule.my_function([4,6,4],3)我该怎么做?

ruby-on-rails - 是否可以在我的 I18n en.yml 文件中使用 yaml key 中的连字符?

例如:en:foobar-does-not-work:'Thisismyvalue'那么如果我这样做:t(foobar-does-not-work)#=>returnsnil这不会在Ruby的yml中解析。有什么方法可以让它发挥作用吗?我的key基于其中包含破折号(-)的URL。 最佳答案 您使用的是哪个版本的ruby​​?你能告诉我们你的代码和错误吗?对我有用:>require'yaml'>YAML.load_file('foo.yml'){"en"=>{"foobar-does-not-work"=>"Thisismyvalue

ruby-on-rails - 在 Rails 4 中组织外部 API 调用 - 模块还是类?

我正在创建一个Rails应用程序,它将使用相当多的外部API,例如SalesForce、FolderGrid(如Dropbox)等,它们都会同步到我的数据库。我从来没有使用过外部api调用,所以我创建了一些基本的Ruby脚本和分散的方法来测试对这些资源的调用。现在我想用我的完整Rails应用程序来实现它们。到目前为止,我首先在我的/lib文件夹中创建一个目录来保存api调用模块/类。/lib/apis/foldergrid.rb现在我不确定组织代码的最佳方法是什么。在我的独立Ruby脚本中,我有用于身份验证、创建文件夹、审核文件、下载文件等的方法。模块中应该包含什么?我什至需要一个模块

ruby - 为什么方法调用在原则上可以是常量时需要消除歧义?

方法调用通常可以省略接收者和参数的括号:deffoo;"foo"endfoo#=>"foo"在上面的例子中,foo在方法调用和对潜在局部变量的引用之间是不明确的。在没有后者的情况下,它被解释为方法调用。但是,当方法名原则上可以是常量名时(即,当它以大写字母开头,并且仅由字母组成时),似乎需要消歧。defFoo;"Foo"endFoo#=>NameError:uninitializedconstantFooFoo()#=>"Foo"self.Foo#=>"Foo"为什么会这样?为什么即使在没有同名常量的情况下,也需要明确区分方法调用和对常量的引用? 最佳答案