ruby - Rails 3 中截断的奇怪行为

标签 ruby string ruby-on-rails-3

我一直在尝试 Rails 3 提供的 String#truncate 方法:

irb(main):001:0> "abcde".truncate(1)
=> "abc..."
irb(main):002:0> "abcde".truncate(2)
=> "abcd..."
irb(main):003:0> "abcde".truncate(3)
=> "..."
irb(main):004:0> "abcde".truncate(4)
=> "a..."
irb(main):005:0> "abcde".truncate(5)
=> "abcde"
irb(main):006:0> "abcde".truncate(6)
=> "abcde"

我期待类似 "a...""ab...""abc..." 的内容。 ..

我不明白为什么会这样。

我正在使用 Ruby 1.8.7。

最佳答案

您提供给 truncate 的长度应该包括 ...,因此 4 或更大的长度应该可以完美工作。

String#truncate 方法中似乎存在错误。看着 source code ,看起来没有任何东西可以处理小于 3 的长度。

例子:

当您提供 4 作为长度时,rails 会为 ... 减去 3,将调整后的长度保留为 1 。因此,rails 使用 1 作为“abcde”子字符串的结尾部分:

"abcde"[0...1] + '...'
# => "a..."

但是,如果您提供 1 作为长度,减去 3 后,您调整后的长度将变为 -2。将 -2 插入范围内可以得到:

"abcde"[0...-2] + '...'
# => "abc..."

关于ruby - Rails 3 中截断的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6048140/

相关文章:

javascript - 查找数组中最长的字符串(即使它是数字数组)

python - 如何根据python中其他列的单元格条件移动列的位置

unit-testing - 干净地卸载 Rspec 并在 Rails 3.x 中使用 vanilla Unit::Test

ruby-on-rails - 与 has_many :through association 的奇怪关联错误

ruby - 用自己的方法替换对象的通用方法

css - css_parser 是否错误地解析了内联 CSS?

ruby-on-rails - 访问哈希元素时未定义的方法

c# - 从数组中捕获字符串

ruby-on-rails-3 - ActiveRecord Rails 3 范围与类方法

ruby-on-rails - RubyMine 代码自动补全