我一直在尝试 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/