Scala 定义隐式方法时出现错误的top语句声明错误

Scala 定义隐式方法时出现错误的top语句声明错误,scala,intellij-idea,implicit-conversion,Scala,Intellij Idea,Implicit Conversion,我有最简单的代码 sealed trait WhereCondition final case class StringWhereCondition(condition: String) extends WhereCondition implicit def fromStrToWhereCondition (str: String): WhereCondition = StringWhereCondition(str) 隐式方法行错误 Wrong top statement declarat

我有最简单的代码

sealed trait WhereCondition
final case class StringWhereCondition(condition: String) extends WhereCondition

implicit def fromStrToWhereCondition (str: String): WhereCondition = StringWhereCondition(str)
隐式方法行错误

Wrong top statement declaration

从IntelliJ和我无法了解它有什么问题?

def
行不能是顶级的(在Scala 2中)。例如,将其放入某个对象。

def
行不能是顶级的(在Scala 2中)。例如,将它放在某个对象中。

您可能正在对象或类之外定义一个方法。如果您希望这样做,请尝试使用REPL(IntelliJ中的Scala工作表),或将该方法包装在对象/类中。您可能正在对象或类之外定义方法。如果您希望这样做,请尝试使用REPL(IntelliJ中的Scala工作表),或将该方法包装在对象/类中。我是Scala的初学者,我阅读了一篇建议,建议在其他类和对象之外声明case类,但是在case-classes声明下编写隐式将更方便……有可能以某种方式组织代码以获得它吗?@DmitryReutov隐式(
def
val
,对象,类)在Scala 2中不能是顶级的。在Scala 3中,另一个建议是不要使用隐式转换。通常隐式表示Scala中的不同事物(类型类、扩展方法、容量…),通常将类型
A
隐式表示为
A
的伴生对象,类型
A[B]
的伴生对象或
B
的伴生对象。这样就不必导入隐式。@DmitryReutov尝试将隐式转换(如果确实需要)放入
String=>WhereCondition
的伴随对象中。有时您不必导入它:
val x:WhereCondition=“abc”
,但有时您需要:
导入WhereCondition;“abc”。一些方法来自Where Condition
。很好,thanx用于建议(我真的不需要它,我只是为了教育目的做一些项目)我是scala的初学者,我读过一篇建议,在其他类和对象之外声明case类,但是在case-classes声明下编写隐式将更方便……有可能以某种方式组织代码以获得它吗?@DmitryReutov隐式(
def
val
,对象,类)在Scala 2中不能是顶级的。在Scala 3中,另一个建议是不要使用隐式转换。通常隐式表示Scala中的不同事物(类型类、扩展方法、容量…),通常将类型
A
隐式表示为
A
的伴生对象,类型
A[B]
的伴生对象或
B
的伴生对象。这样就不必导入隐式。@DmitryReutov尝试将隐式转换(如果确实需要)放入
String=>WhereCondition
的伴随对象中。有时您不必导入它:
val x:WhereCondition=“abc”
,但有时您需要:
导入WhereCondition;“abc”。一些来自Where Condition的方法。很好,谢谢你的建议(我真的不需要它,我只是为了教育目的做一些项目)