草庐IT

参数调用

全部标签

ruby - 在调用方法的ruby中获取文件名

我有一个方法foo,它在脚本script001.rb中被调用我应该如何编写foo方法,以便它返回调用它的脚本的文件名? 最佳答案 为了避免需要处理caller风格的字符串,你可以使用Kernel#caller_locations,反而。它返回一个数组Thread::Backtrace::Location对象,它有一些方便的方法供您使用。要获取文件名,在您的情况下,您可以使用#path方法:deffoocaller_locations.first.pathend 关于ruby-在调用方法的

ruby - ruby 会自动调用初始化方法吗?

如果类定义中包含初始化方法,是否需要显式初始化对象? 最佳答案 不,Ruby不会自动调用initialize。Class#new的默认实现看起来有点像这样:classClassdefnew(*args,&block)obj=allocateobj.initialize(*args,&block)objendend[实际上,initialize默认是private,所以你需要使用obj.send(:initialize,*args,&block)。]因此,Class#new的默认实现确实调用了initialize,但完全有可能(尽管非

ruby-on-rails - 使用 get 和 delete 运行 Rspec 测试时获取错误数量的参数(2 个为 0)

这应该是一个简单的问题,就是找不到导致测试失败的原因。运行rspec时,我不断收到以下错误。但是在评论“发送”方法之后,一切正常。1)MessagesGET/messagesworks!(nowwritesomerealspecs)Failure/Error:gettarget_app_messages_path(@message.target_app.id)ArgumentError:wrongnumberofarguments(2for0)#./app/controllers/messages_controller.rb:37:in`send'路线.rbresources:targ

ruby - 在 RSpec 中调用相同的 rake 任务两次

我正在尝试使用rspec测试rake任务,为此我需要调用它两次,但是它只被调用一次。it'firsttest'doRake::Task['my_rake_task'].invoke#raketaskwasprocessedendit'secondtest'doRake::Task['my_rake_task'].invoke#raketaskwasNOTprocessedend 最佳答案 如果rake任务已经被调用过,除非你调用它,否则它不会再次运行:@rake[@task_name].reenable或调用它@rake[@task

ruby-on-rails - 如何使用 FactoryGirl 发送参数(而不是手动将参数作为散列发送)?

我有以下有效的rspec测试:it"redirectstothecreatedapi_key"dopost:create,:api_key=>{:api_identifier=>"asdfadsf",:verification_code=>"12345"}response.shouldredirect_to(ApiKey.last)#(oranyothertestfunction)end但我使用Factorygirl,所以我不必手动创建api_key。如何复制上述功能,但使用factorygirl?使用:it"redirectstothecreatedapi_key"dotest=Fa

ruby-on-rails - 参数错误 : wrong number of arguments (1 for 2)

我是Rails、MVC和CRUD的新手,我正在尝试使用更新方法来更改帖子的投票数量。我的PostsController更新方法中有以下代码:defupdate@post=Post.find(params[:id])ifparams[:vote]=='up'@post.update_column(:ups=>@post[:ups]+1)elsifparams[:vote]=='down'@post.update_column(:downs=>@post[:downs]+1)endflash[:notice]="Thanksforvoting!Thishelpsusdetermineimp

ruby - 是否可以在不调用初始化的情况下实例化 Ruby 类?

有时,当我编写单元测试时,我需要在不调用initialize方法的情况下实例化一个类。例如,当构造函数实例化其他类时,无论如何我都会用stub替换它们。例如:classSomeClassThatIWillTestdefinitialize@client=GoogleAnalyticsClient.new@cache=SuperAdvancedCacheSystem.newend#...end在测试中,我可能会将@client和@cache替换为stub,因此我宁愿从未调用构造函数。有什么黑魔法可以帮助我解决这个问题吗? 最佳答案 当

ruby - splat 参数后的可选参数

这是我的程序:defcalculate(*numbers,options={})add(numbers)ifoptions[:add]subtract(numbers)ifoptions[:add]==falseenddefadd(*numbers)numbers.reduce(:+)enddefsubtract(*numbers)numbers.reduce(:-)endpcalculate(1,2)在第一行,它在提示tests.rb:1:syntaxerror,unexpected'=',expecting')'defcalculate(*numbers,options={})__

Ruby:如何更改函数调用中参数的值?

我将如何在ruby​​中实现一个函数,如下所示?change_me!(val)更新:我打算做的是:defchange_me!(val)val=val.chopwhileval.end_with?'#'orval.end_with?'/'end这刚刚结束......change_me!'test#///'=>"test#///" 最佳答案 您的想法是错误的。虽然可以在Ruby中执行此操作,但它会过于复杂。正确的做法是:val.change_me!当然,这取决于您要更改的类别。关键是,按照惯例,带有“!”的方法影响调用它们的类实例。所以

ruby - 在采用多个可选参数的方法中,除了第一个参数之外,如何指定?

我有这样的方法:deffoo(fruit='apple',cut="sliced",topping="icecream")#somelogichereend我怎样才能调用它,我只覆盖顶部参数但对其他参数使用默认值,就像这样foo('','','hotfudge')当然这不会按预期工作,但我只想为第三个可选参数提供一个值,并让前两个保持默认值。我知道如何使用散列来做到这一点,但他们是使用上述语法的快捷方式吗? 最佳答案 从Ruby2.0开始,您可以使用关键字参数:deffoo(fruit:'apple',cut:"sliced",to