草庐IT

if-cases

全部标签

ruby - 写一个更好的 switch-case 函数?

我是一个Ruby新手。我怎样才能为这个功能写得更好?我可以改用哈希表吗?defreadable_status(status)ifstatus=="1"return"go"endifstatus=="2"return"stop"endifstatus=="3"return"die"endend 最佳答案 如果您想使用散列(根据您的问题),您可以这样做:defreadable_status(status)readable={"1"=>"go","2"=>"stop","3"=>"die"}readable[status]||"defau

ruby - 在没有 if...else block 的情况下在 Ruby 中处理 ARGV

在关于unconditionalprogramming的博文中MichaelFeathers展示了如何将限制if语句用作降低代码复杂性的工具。他用一个具体的例子来说明他的观点。现在,我一直在思考其他具体示例,它们可以帮助我更多地了解无条件/ifless/forless编程。例如在这个cat克隆有一个if..elseblock:#!/usr/bin/envrubyifARGV.length>0ARGV.eachdo|f|putsFile.read(f)endelseputsSTDIN.readend原来ruby​​有ARGF这使得这个程序更简单:#!/usr/bin/envrubyput

ruby-on-rails - rails : Devise : make `reset password` use `confirmation resend` if user is unconfirmed

鉴于用户正在等待确认电子邮件或已收到确认电子邮件,我如何确保他们不使用重置密码过程和强制他们填写标准确认表格(使用确认电子邮件)。在我的例子中,用户必须在确认后选择一个用户名,而密码重置很烦人地绕过了这个。 最佳答案 您需要禁用User模型中的:recoverable模块,因为这是启用密码重置的原因。如果您还没有自定义该页面,您还需要删除devise/sessions/new.html.erb中的忘记密码链接。 关于ruby-on-rails-rails:Devise:make`rese

ruby - 是否可以结合 with_options 和 :if for conditional validations?

我正在尝试使用with_options为管理员用户将我的条件验证组合在一起。对用户名唯一性的第二次验证最终覆盖了with_options条件。有更好的方法吗?或者我应该忘记with_options并编写两个单独的语句?with_options:if=>Proc.new{|user|user.admin?}do|admin|admin.validates:email,:presence=>trueadmin.validates:username,:uniqueness=>true,:if=>Proc.new{|user|user.category=="customized_usernam

ruby - Opengl, ruby ,glBlendFunc : place transparent images on top of each others as if it was opaque

我不确定glBlendFunc是否是解决我问题的好函数,但我认为我会需要它!这是我的问题:你看到右边那两棵松树的倒影了吗?我想要这样的东西:然后,我需要一种方法来显示与不透明图像相同的显示,但具有透明图像。glBlendFunc中有没有特殊的组合,或者我应该通过其他方式进行? 最佳答案 我认为纯粹的混合方法行不通。如果你有两个重叠的树反射,第一个在渲染后与水混合。当您绘制第二棵树时,您可能只想将第二棵树与水混合。但是帧缓冲区中水的颜色已经与第一棵树混合,因此单独的水色不再存在于帧缓冲区中。我想到了三种方法:将所有树反射绘制到FBO中

ruby - 使用 state_machine,如何从 :if lambda 内部访问事件参数

我正在使用state_machinegem来模拟纸牌游戏,我有一个转换条件,需要在绘制纸牌时知道事件参数。这是一些示例代码。classCardGamestate_machinedobefore_transition:drawing_card=>any,:do=>:drawn_cardevent:draw_cardtransition:drawing_card=>:end_of_round,:if=>lambda{|game|#Checkgoeshere,Irequireknowingwhichcardwastaken#whichispassedasargumentstotheevent

ruby-on-rails - 为什么 if __FILE__ == $0 在带有 Rails 5.2 的 Heroku 上不起作用?

我以前有一些这种形式的脚本:classThingdefdo_things...endendif__FILE__==$0Thing.new.do_thingsend我用railsrunner调用了它们。他们在使用Rails5.1的Heroku上运行良好。当我升级到rails5.2时,它们不再在Heroku上运行(在未执行block的情况下静默退出)。但它们仍然在我的开发环境(Ubuntu)中执行。我使用脚本的相对路径运行它们(例如railsrunnerscripts/thing.rb)rails5.2英雄联盟__FILE__:脚本的绝对路径(/app/scripts/thing.rb)$

ruby - 惯用的 Ruby - 仅在不使用 `if` 的情况下分配变量

我有一大堆这样的行api_data[:foo]=fooiffooapi_data[:bar]=barifbarapi_data[:batz]=batzifbatz我想要一种简洁、惯用的方式来仅当!nil时才赋值。谢谢 最佳答案 如果您只想分配非nil的值:api_data.merge!({foo:foo,bar:bar,bart:barts}.reject{|_,v|v.nil?})这有点困惑,因此您可能希望对忽略nil赋值的Hash类进行扩展:classPickyHash然后:api_data=PickyHash.newapi_d

ruby - 检查方法的真实性是否也在条件语句 (if) 中运行它?

defaddputs"\nAddarestaurant\n\n".upcaserestaurant=Restaurant.newprint"Restaurantname:"restaurant.name=gets.chomp.stripifrestaurant.saveputs"\nRestaurantAdded\n\n"elseputs"\nSaveError:Restaurantnotadded\n\n"endenddefsavereturnfalseunlessRestaurant.file_usable?File.open(@@filepath,'a')do|file|file

Ruby 的 "foo = true if !defined? foo"不会按预期工作

当它实际上没有被定义时,它得到值nil只是因为它被“触摸”了:$irbruby-1.9.2-p0>foo=trueif!defined?foo=>nilruby-1.9.2-p0>foo=>nilruby-1.9.2-p0>if!defined?barruby-1.9.2-p0?>bar=trueruby-1.9.2-p0?>end=>trueruby-1.9.2-p0>bar=>true所以if...end按预期工作,但foo=trueif...没有。 最佳答案 Ruby在执行包含赋值的行之前定义了一个局部变量,因此defined