mattn / mruby-onig-regexp

mrbgem of 鬼雲's Regular Expression
31 stars 36 forks source link

slice! does not work with Regexp #95

Closed mattn closed 5 years ago

mattn commented 5 years ago

メールにて不具合報告

■ テストコード

'abc'.slice!(/./m)

■ エラー内容 (mruby 1.4.0)

trace (most recent call last):
        [0] test.rb:1
        [1] c:\mruby\mrbgems\mruby-string-ext\mrblib\string.rb:207:in slice!
c:\mruby\mrbgems\mruby-string-ext\mrblib\string.rb:207: undefined method '<' (NoMethodError)

■ 呼び出し元 onig_regexp.rb

  def slice!(*args)
    if args.size < 2
      result = slice(*args)    ### ←この先でエラー

■ 該当コード string.rb (mruby 1.4.0)

def slice!(arg1, arg2=nil)
    raise FrozenError, "can't modify frozen String" if frozen?
    raise "wrong number of arguments (for 1..2)" if arg1.nil? && arg2.nil?

    if !arg1.nil? && !arg2.nil?
      idx = arg1
      idx += self.size if arg1 < 0   #### ←ここでエラー

■ 該当コード string.rb (mruby 2.0.1)

def slice!(arg1, arg2=nil)
  (中略)
  if arg1.kind_of?(Range)
  (略)
  elsif arg1.kind_of?(String)
        validated = true
  else
    idx = arg1
    idx += self.size if arg1 < 0   #### ←ここでエラー

mrubyもrubyも最近始めたばかりで、私はド素人なのですが 本家のString.slice!がarg1を文字列か数値でしか判断していないので、 arg1がRegexpだった場合、それを呼ばずに別の処理が必要ではないでしょうか。

take-cheeze commented 5 years ago

ダウト!

mrubyもrubyも最近始めたばかりで、私はド素人なのですが

なるほど、よくわからないです(めんどくさい非互換系ですかね...

mattn commented 5 years ago

どうしようかなーと思ってて、mruby-string-ext 側に手を入れるか、そっちを呼ばせないように直すか。

take-cheeze commented 5 years ago

性能多少悪くても本体はない前提で作るべきな気がするので、呼ばせないほうですかねー(めんどくさそう