6

implicitパッケージからインポートした関数に 問題があります。

正規表現を使用してテキスト内の何かを検索するクラスがあります。私はそれを次のように使用したいと思います:

val pattern = "some pattern here".r                                          
pattern findSomethingIn some_text                                            

そのために、関数を含むラッパーimplicitに変換する関数を定義しますpatternWrapperfindSomethingIn

package mypackage {                                                          

  class Wrapper ( val pattern: Regex ) {                                     
    def findSomethingIn( text: String ): Something = ...                     
  }                                                                          

  object Wrapper {                                                           
    implicit def regex2Something( pat: Regex ): Wrapper = new Wrapper( pat ) 
  }                                                                          

}                                                                            

私がそれを使用する場合

import mypackage._                                                           

Wrapper.regex2Something( pattern ) findSomethingIn some_text                 

できます。一方、私が使用する場合

pattern findSomethingIn some_text // implicit should work here??             

私は得る

value findPriceIn is not a member of scala.util.amtching.Regex               

したがって、暗黙の変換はここでは機能しません...問題は何ですか?

4

2 に答える 2

9

必要になるだろう

import mypackage.Wrapper._

適切なメソッドをインポートします。

詳細については、このブログエントリを参照してください。特に、Conversionsオブジェクトの定義/インポートに注意してください。

于 2012-08-01T10:28:40.800 に答える
3

ブライアンの答えが最善ですが、代わりにパッケージオブジェクトを使用することもできます

package object mypackage {                                                           
  implicit def regex2Something( pat: Regex ): Wrapper = new Wrapper( pat ) 
} 

import mypackage._これにより、暗黙的な定義がパッケージ自体に含まれるため、元の行を使用できるようになります。

http://www.scala-lang.org/docu/files/packageobjects/packageobjects.html

于 2012-08-02T12:01:12.237 に答える