在Ruby中定义字符串#prev方法
我看到Ruby的String#next可以处理非ASCII字符。 说我懂英语、孟加拉语和印地语:在Ruby中定义字符串#prev方法,ruby,string,encoding,Ruby,String,Encoding,我看到Ruby的String#next可以处理非ASCII字符。 说我懂英语、孟加拉语和印地语: > 'a'.next # => "b" > 'ক'.next # => "খ" > 'क'.next # => "ख" 这是正确的 现在我想为String类动态定义一个prev方法。 我可以这样做: String.define_method(:prev) { slice(0..-2) + slice(-1).ord.-(1).chr } >
> '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)
有什么方法可以做到这一点吗?您必须为此传递编码,因为默认的外部编码是
US-ASCII
将chr
更改为chr('UTF-8')
将导致“\u0915”
,这对于之前的符号是正确的ख'代码>
> 'b'.prev # => "a"
> 'ख'.prev # => "क"
> 'খ'.prev # => "ক"