我已经看到 Ruby 的 String#next 可以处理非 ASCII 字符。 说我懂英语、孟加拉语和印地语:
> 'a'.next # => "b"
> 'ক'.next # => "খ"
> 'क'.next # => "ख"
哪个是正确的。
现在我想为 String 类动态定义一个 prev
方法。
我可以这样做:
String.define_method(:prev) { slice(0..-2) + slice(-1).ord.-(1).chr }
> 'hit'.prev # => "his"
> 'b'.prev # => "a"
> 'ख'.prev
Traceback (most recent call last):
4: from /home/sourav/.irb:351:in `<main>'
3: from (irb):17
2: from (irb):11:in `block in irb_binding'
1: from (irb):11:in `chr'
RangeError (2325 out of char range)
但它应该返回以下内容:
> 'b'.prev # => "a"
> 'ख'.prev # => "क"
> 'খ'.prev # => "ক"
有办法做到这一点吗?
最佳答案
您必须传递编码,因为默认外部编码是 US-ASCII
。
将 chr
更改为 chr('UTF-8')
将生成 "\u0915"
,这对于之前的符号是正确的'ख'
关于ruby - 在 Ruby 中定义 String#prev 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56940212/