scala - 带有 var Enum 成员的 case 类,退出作用域后不保存值

标签 scala enums scala-2.10

我在这里遗漏了一些东西。

我有一个包含一些字符串成员和 2 个枚举的案例类。
类构造函数接收字符串形式的枚举值。

我使用命令:

var order = Order.withName(orderInput) //Order is an object that extends Enumeration

为了避免类构造时出现异常(如果输入字符串不在枚举值中,我在构造类时将枚举值设置为默认值。

我有这个案例类的验证函数,在验证期间我设置了枚举,在这种情况下,如果我遇到异常,它是在验证期间而不是在构造对象时。

代码如下:

枚举代码:

object Order extends Enumeration {
  type OrderType = Value
  val asc = Value("asc")
  val desc = Value("desc")

  def validateOrder(orderInput:String)
  {
      val orderValidate = Order.isOrderType(orderInput)
      if (!orderValidate)
        throw new Exception("Order is invalid ("+orderInput+")!")       
  }
  def isOrderType(s: String) = values.find(_.toString.equals(s)).isDefined
}

我的案例类别:

case class ProductsByCategoriesRequest(langaugeInput:String, tenantIdInput:String, categoriesIds:List[String], startInput:Integer, maxResultsInput:Integer,sortInput:String,orderInput: String)
extends ProductSorting 
with Paging
with LanguageFilter
with TenantFilter
 with BaseRequest
{
  var order = Order.asc //default value
  var sortField = Field.name //default value
  val maxResults = maxResultsInput
  val start = startInput
  val language = langaugeInput
  val tenantId = tenantIdInput

  def validate()
  {

    if (StringUtils.isListNullOrEmpty(categoriesIds))
      throw new Exception("Categories Ids list is invalid")    
     validateLanguage
     validateTenant
     Order.validateOrder(orderInput)
     var order = Order.withName(orderInput)
     Field.validateField(sortInput)
     var sortField = Field.withName(sortInput)     
  }
}

有什么奇怪的吗?在验证期间,枚举会发生更改,但稍后当我使用此对象并获取枚举的值时,它将始终为“asc”作为默认值。尽管我将其设置为“desc”并看到它发生了变化!

这可能与 scala 中的对象行为以及 var 在存在作用域后不保留成员的真实状态这一事实有关?

谢谢

最佳答案

您正在 validate 中定义名为 order 和 sortField 的变量(范围更窄),而不是将值分配给之前声明的变量 - 删除 var 来自 ordersortField 分配。

所以:

var order = Order.withName(orderInput)
Field.validateField(sortInput)
var sortField = Field.withName(sortInput) 

应该变成:

order = Order.withName(orderInput)
Field.validateField(sortInput)
sortField = Field.withName(sortInput) 

关于scala - 带有 var Enum 成员的 case 类,退出作用域后不保存值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22665640/

相关文章:

java - 如何在 Scala 中向现有 Java 类添加工厂方法

scala - 为什么 sbt 每次运行时都会抛出这个错误?

scala - Spark : How to run logistic regression using only some features from LabeledPoint?

scala - Ref/MVar 的有效更新

c# - 查明枚举是否设置了 "Flags"属性

c# - 没有具有键 'IEnumerable<SelectListItem>' 的 'PestType' 类型的 ViewData 项

c - 遍历 C 中的枚举?

scala - 你如何在 Slick 中使用带有参数的 StaticQuery.update?

scala - Scala主函数的默认参数?

scala - 一个参数的默认值如何引用另一个参数?