草庐IT

Duck-typing

全部标签

ruby - 如何使用 Ruby Duck 打字

我正在学习Ruby,我遇到了一个关于打字的主要概念问题。请允许我详细说明为什么我不理解范式。假设我像您在Ruby中一样为简洁的代码进行方法链接。我必须准确地知道链中每个方法调用的返回类型是什么,否则我无法知道下一个链接上有哪些方法可用。难道我每次都要检查方法文档吗??我遇到了这个不断运行的教程练习。似乎我陷入了引用、推断、运行、失败、修复、重复以使代码运行的过程,而不是准确地知道我在编码过程中使用的是什么。这与Ruby的直观性promise背道而驰。假设我正在使用第三方库,我再次需要知道允许哪些类型传递参数,否则我会失败。我可以查看代码,但可能有也可能没有任何关于该方法期望的类型的注释

ruby - pg gem : 'Warning: no type cast defined for type "numeric"'

我在从pggem中获取输入结果时遇到问题。require'pg'require_relative'spec/fixtures/database'client=PG.connect(DB[:pg])client.type_map_for_queries=PG::BasicTypeMapForQueries.new(client)client.type_map_for_results=PG::BasicTypeMapForResults.new(client)client.exec(%|select*fromtestme;|)do|query|query.each{|r|putsr.ins

ruby-on-rails - Rails ActiveRecord - update_all : how to update multiple fields at once with mixed type of arguments

我有一个用例,我想使用ActiveRecord::Relationupdate_all方法并指定要设置的几个字段。我使用update_all是因为可以更新很多条目,我不想将它们全部加载并一个一个地更新。其中一些需要直接的SQLSET语句,例如因为我根据另一列的值设置一列。是否有一个简单的语法与update_all一起使它可读,沿着这个=>MyModel.where(state::foo).update_all(['timespent=timespent+500',#Can'tbeanythingelsethanaSQLstatementstate::bar,#RegularRailsS

ruby - 子类化核心 Ruby 类,例如 Hash

我需要一个像Hash一样工作的类,但不一定具有所有Hash方法。我读到过将像Hash这样的核心类子类化不是一个好主意。不管这是不是真的,做这种事情的最佳实践是什么?#(a)subclassHash,addnewmethodsandinstancevariablesclassBook我知道Ruby有不止一种方法来完成给定的任务,但是在相对简单的情况下,对于上述方法中的哪一种更可取,是否有任何通用规则? 最佳答案 如果我绝对不希望类哈希对象具有某些哈希方法,那么我会将对象包装在我自己的类中,并且只公开我希望它具有的方法(您的选项b)。如

ruby-on-rails - Rails 4.2,回形针 gem 。无法附加 .docx 类型,尽管已注册 MIME 类型,但读取 content_type 为 'application/zip'

我已经注册了一个MIME类型以允许Paperclip读取.docx文件的content_type作为application/vnd.openxmlformats-officedocument.wordprocessingml.document。但是在测试中,content_type仍被读取为application/zip。知道为什么吗?更令人沮丧的是,.pptx和.xlsxmime类型已经被注册,这些测试通过了(呃)。config/initializers/mime_types.rbMime::Type.register'application/vnd.openxmlformats-o

ruby-on-rails - capistrano - NameError:未初始化的常量 Net::SSH::KnownHosts::SUPPORTED_TYPE

我正在尝试将我的Rails(3.1.3)应用程序部署到预生产环境。我使用capistrano(2.12.0)和rvm-capistrano(1.2.2)。当我调用bundleexeccapssh时,它工作正常。但是当我调用bundleexeccapdeploy时,我得到以下跟踪:$capdeploytriggeringstartcallbacksfor`deploy'*18:42:19==Currentlyexecuting`multistage:ensure'***Defaultingto`preprod'*18:42:19==Currentlyexecuting`preprod'*

ruby-on-rails - Rails 3.1 和 Ruby 1.9.3p125 : ruby-debug19 still crashes with "Symbol not found: _ruby_threadptr_data_type"

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:ruby-debugwithRuby1.9.3?我听说ruby​​1.9.3p125有解决ruby​​-debug19问题的传言,所以根据RVM站点上的说明,我重新安装了1.9.3:$rvmreinstall1.9.3--patchdebug--force-autoconf$ruby-vruby1.9.3p125(2012-02-16revision34643)[x86_64-darwin11.2.0]然后:geminstallruby-debug19将此条目添加到我的Gemfile中:gem'ruby-de

ruby - 背包 : how to add item type to existing solution

我一直在使用动态规划的这种变体来解决背包问题:KnapsackItem=Struct.new(:name,:cost,:value)KnapsackProblem=Struct.new(:items,:max_cost)defdynamic_programming_knapsack(problem)num_items=problem.items.sizeitems=problem.itemsmax_cost=problem.max_costcost_matrix=zeros(num_items,max_cost+1)num_items.timesdo|i|(max_cost+1).ti

ruby-on-rails - Rails 6.1 将不经修改返回 Content-Type header ...改为使用 `#media_type`

当引用此block时,此弃用消息对我来说意味着什么?defjson_response(object,status=:ok)renderjson:object,status:statusend编辑讯息:Rails6.1willreturnContent-Typeheaderwithoutmodification…use#media_typeinstead 最佳答案 当我将我的应用程序从Rails5.2.3升级到Rails6.0.0-rc1时,我收到了同样的错误消息config/application.rb#thiswastheline

ruby-on-rails - { "error": { "message": "Missing client_id parameter.", "type": "OAuthException", "code": 101 } }

我正在关注RyanBatesScreenCast#360Facebook身份验证...当我到达点击链接登录facebook的部分时,我得到一个{"error":{"message":"Missingclient_idparameter.","type":"OAuthException","code":101}}我尝试像之前所说的那样重新启动服务器我正在拔头发试图弄清楚这一点我在facebook开发页面上的网站url是正确的我已经按照他的步骤数百次 最佳答案 可能是你没有为FACEBOOK_KEY和FACEBOOK_SECRET设置e