Я видел, что Ruby's String # next может обрабатывать символы не ASCII.
Сказав, что я знаю английский, бенгальский и хинди:
> 'a'.next # => "b"
> 'ক'.next # => "খ"
> 'क'.next # => "ख"
Что верно.
Теперь я хочу динамически определить метод prev
для класса String.
Я могу сделать это:
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 # => "ক"
Есть ли способ сделать это?