使用字符串按名称访问局部变量

2024-04-20

我对此很陌生,但我有以下代码:

when /^read (.+)$/
   puts "Reading #{$1}:"
   puts $1.description.downcase

我想使用 $1 作为可以调用方法的变量,当前解释器返回一个"NoMethodError: undefined method 'description' for "Door":String".

Edit:

例如:

door = Item.new( :name => "Door", :description => "a locked door" )
key  = Item.new( :name => "Key",  :description => "a key"         )

您需要提供代码设置的更多详细信息才能获得好的答案(或者让我找出这是哪个问题的重复项:)。引用了什么样的变量$1?以下是一些猜测:

  1. 如果这实际上是同一实例上的方法,您可以通过以下方式调用该方法:

    # Same as "self.foo" if $1 is "foo"
    self.send($1).description.downcase 
    
  2. 如果这些是实例变量,则:

    # Same as "@foo.description.downcase"
    instance_variable_get(:"@#{$1}").description.downcase
    
  3. 如果这些是局部变量,您不能直接执行此操作,您应该更改代码以使用哈希:

    objs = {
      'foo' => ...,
      'key' => Item.new( :name => "Key", :description => "a key" )
    }
    objs['jim'] = ...
    case some_str
      when /^read (.+)$/
        puts "Reading #{$1}:"
        puts objs[$1].description.downcase
    end
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用字符串按名称访问局部变量 的相关文章

  • 将 Ruby 程序作为 Windows 服务运行?

    是否可以将 ruby 应用程序作为 Windows 服务运行 我看到有一个相关的问题讨论运行Java 应用程序作为 Windows 服务 https stackoverflow com questions 25530 best method
  • Ruby:我可以编写没有连接的多行字符串吗?

    有没有办法让这个看起来好一点 conn exec select attr1 attr2 attr3 attr4 attr5 attr6 attr7 from table1 table2 table3 etc etc etc etc etc
  • 页面内容中 html 实体的 Rspec 测试

    我正在编写一个请求规范 并想测试字符串 Reports Aging Reports 是否存在 如果我直接将字符放入匹配器表达式中 我会收到错误 无效的多字节字符 所以我尝试了以下操作 page should have content Rep
  • 测试子节点是否存在(不会出现NoMethodError)

  • 如何为开发和生产指定不同版本的 gem

    我需要有不同版本的 gem 进行开发和生产 因此我将以下内容放入我的 gemfile 中 group development test do gem rspec rails 2 11 0 gem bcrypt ruby 3 1 2 end
  • 如何在 ruby​​ 中打印原始字符串?

    我要打印escaped or raw字符串的版本 例如 给定这个字符串 a b c d 我想要得到 a nb nc nd 是否可以 s a b c d s dump gt a nb nc nd s dump 1 1 gt a nb nc n
  • gsub的时间复杂度

    一根长绳子s仅包含0 and 1 这段 Ruby 代码计算了有多少个1有 s gsub 1 count Big O 表示法的时间复杂度是多少 有没有一个工具可以进行计算 据我所知 没有一个通用工具可以计算任意代码的 Big O 表示法 这将
  • Ruby on Rails 安装问题 (Windows)

    我从 RuyInstaller 安装了 Ruby 2 0 0 和 DevKit 创建新项目时出现错误消息 rails new testtest d mysql a lot of output here Installing mysql2 0
  • Rails:基于关联值的ActiveRecord查询

    我有 2 个型号 Report and Server具有belongs to 和has many 关系 我使用创建了一个访问器方法delegate这允许Report来查找其关联的Server company id 现在 我想运行一个查询Re
  • irb 中的单词边界

    我在 Snow Leopard 上使用终端 在命令行中 如果我输入foo bar baz bang quuz quux 当我点击选项 B 时 它会将光标逐字向后移动 在每个句点处停止 因为它认为句点是单词边界 同样 选项 F 逐字向前移动
  • 为什么 to_proc 在 Ruby 改进中不起作用?

    看起来to proc不适用于细化中定义的方法 module ArrayExtensions refine Array do def sum reduce 0 end end end using ArrayExtensions puts 1
  • 如何从 ActionMailer 发送签名电子邮件?

    我使用 GMail 作为我的 SMTP 服务器 我的配置工作得很好 config initializers action mailer rb ActionMailer Base smtp settings tls gt true addre
  • 如果这段代码不是玩笑,那么它到底是如何工作的呢?

    class Tree def initialize d d d end def to s l r gt d end def total d is a Numeric d 0 email protected cdn cgi l email p
  • 保护客户端 API 的安全

    我正在为基于 JavaScript 的游戏构建服务器端 API 和客户端库 其中必须确保两个非常重要的功能的安全 用户每次游玩都必须扣款 我们必须确保提交的分数是玩家实际获得的分数 解决第一个问题看起来很简单 在每次游戏开始时 我们都会调用
  • 选择预先选择多个值的标签 - 在数据库中手动插入的值

    我需要在 select tag 中预先选择多个值 但我在空缺表中 手动 添加空缺 如下所示 我的控制器 def create hr curriculum generic HrCurriculumGeneric new params hr c
  • Java 到 ruby​​ AES/ECB/PKCS5Padding 加密

    我有一个使用第三方支付门户的在线电子商务网站 支付门户一直运行良好 直到第三方支付门户要求每个人开始使用带有其他支付参数的哈希密钥 现在的问题是第三方支付门户只提供了一页文档来实现哈希密钥 这是提供的文档 加密演算法 为了减少数据传输和发布
  • ruby 1.9 如何将数组转换为不带括号的字符串

    我的问题是关于如何在 ruby 1 9 中将数组元素转换为字符串而不需要括号和引号 我有一个数组 数据库提取 我想用它来创建定期报告 myArray Apple Pear Banana 2 15 12 在 ruby 1 8 中我有以下行 r
  • Rails 形式的当前日期

    我正在学习 Rails 并在书外进行一些探索 并随着知识的增长创建一个具有附加功能的简单应用程序 我正在编写一个简单的博客应用程序 我在表单中添加了一个名为 日期 的字段 我不希望这是一个字段 我希望它从服务器获取日期并将其自动放入数据库中
  • 有没有办法从 UTF-8 编码的文件中删除 BOM?

    有没有办法从 UTF 8 编码的文件中删除 BOM 我知道我所有的 JSON 文件都是以 UTF 8 编码的 但是编辑 JSON 文件的数据录入人员将其保存为带 BOM 的 UTF 8 当我运行 Ruby 脚本来解析 JSON 时 它失败并
  • 下载位置 Selenium-webdriver Cucumber Chrome

    我正在使用 Cucumber 和 Ruby 当通过 Selenium Webdriver 在 Chrome 中运行测试时 我想将下载位置更改为测试文件夹而不是用户下载文件夹 我当前的 chrome 驱动程序设置如下 Capybara def

随机推荐