【问题标题】:Ruby delete method (string manipulation)Ruby 删除方法(字符串操作)
【发布时间】:2015-07-07 03:00:42
【问题描述】:

我是 Ruby 新手,并且一直在阅读 Neighborly 先生的 Humble Little Ruby 指南。在此过程中,代码示例中出现了一些拼写错误,但我一直设法找出问题所在并随后修复它 - 直到现在!

这真的很基础,但我无法让以下示例在 Mac OS X (Snow Leopard) 上运行:

gone = "Got gone fool!"
puts "Original: " + gone
gone.delete!("o", "r-v")
puts "deleted: " + gone

我期望的输出是:

Original: Got gone fool!
deleted: G gne fl!

我实际得到的输出是:

Original: Got gone fool!
deleted: Got gone fool!

删除!方法似乎没有任何效果。

谁能解释这里出了什么问题? :-\

【问题讨论】:

    标签: ruby string delete-method


    【解决方案1】:

    String.delete 方法 (Documented here) 将其参数视为数组,然后根据其数组的交集删除字符。

    两个数组的交集是两个数组共有的所有字符。因此,您对 gone.delete!("o", "r-v") 的原始删除将变为

    gone.delete ['o'] & ['r','s','t','u','v']
    

    两个数组中都没有字符,因此删除会得到一个空数组,因此不会删除任何字符。

    【讨论】:

    • 当时的另一个错字归咎于书中的示例。 ;-) 非常感谢您的解释。
    【解决方案2】:

    我变了

    gone.delete!("o", "r-v")
    

    gone.delete!("or-v")
    

    而且效果很好。

    【讨论】:

    • 非常感谢!我几乎尝试了一切,但那!出于兴趣,您也在使用 MAC OS X 吗?
    • 不。我在 windows 和 linux 上使用 ruby​​。大多数 ruby​​ 应该与操作系统无关,因此您遇到的任何初始问题都不应该是特定于 OS X 的。
    • 使用双引号时注意扩展:stackoverflow.com/a/4190812/1729094
    【解决方案3】:

    您可以使用 gsub 等不同的方式获得相同的 o/p

    puts "deleted: " + gone.gsub('o', '')
    

    o/p

    deleted: Got gone fool!
    

    【讨论】:

    • 很奇怪,不是吗?你也在使用 MAC OS X 吗?
    猜你喜欢
    • 2012-03-29
    • 2011-06-25
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 2011-11-23
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    相关资源
    最近更新 更多