Scala编译错误:value不是成员

时间:2015-03-17 23:35:10

标签: scala

抱歉我的英文不好!

我是scala语言的新手,我正在编译一个带有一些修改并获得错误的项目

“scala值不是”的成员“......有些人可以帮助我吗?按照我的代码:

Command.scala

package com.bla.cms.domain

import scala.collection.Map
import redis.clients.jedis.Jedis

sealed trait CommandResult
object Success extends CommandResult
object Failure extends CommandResult
object Unauthorized extends CommandResult

trait Command {
  def captchaValidator:Validator
  def logger:Logging

  val properties = PropertiesHandler.readProperties(System.getProperty(PropertiesHandler.configFileNameKey))
}

RedisIcrementCommand.scala

package com.bla.cms
package domain

import scala.collection.Map
import redis.clients.jedis.JedisPool
import dispatch._
import org.apache.log4j.Logger
import redis.clients.jedis.Jedis

class RedisIncrementCommand(database: Jedis, val captchaValidator:Validator, val logger:Logging) extends Command {

  def execute(parameters: Map[String,String]):CommandResult = {
      captchaValidator.validate(parameters) match {
        case Right(params) =>
          executeInDatabase(params)
        case Left(status) =>
          logger.info("Falha ao tentar executar comando. Captcha inválido. Status: " + status)
          Failure
      }
  }

  def executeInDatabase(parameters: Map[String,String]):CommandResult = {
    parameters.get("selectedAnswer") match {
      case Some(selectedAnswer) =>
            database.incr(selectedAnswer)
            database.sadd(Answers.key, selectedAnswer)
            logger.info("Incremento recebido com sucesso. Opção: " + selectedAnswer)
            Success
      case None =>
        logger.info("Falha ao tentar computar incremento. Alternativa não informada.")
        Failure
    }
  }
}

PollServle.scala

package com.bla.cms             

import javax.servlet.http._    
import redis.clients.jedis.JedisPool
import scala.collection.JavaConverters._
import scala.collection.JavaConversions._
import com.bla.cms.domain.Logging
import org.apache.log4j.Logger 
import scala.util.matching.Regex

class PollServlet extends HttpServlet with RequiresConnection {
  import com.bla.cms.domain._   
  import URLHandler._          

  override def doPost(request:HttpServletRequest, response:HttpServletResponse):Unit = {

    val parametersMap = new ServletApiAdapter(request,response).parameters

    val outcome = newIncrementCommand(request).execute(parametersMap)
    redirect(request, response, outcome)
  }
}

当我编译时,我得到了:

[error]PollServlet.scala:19: value execute is nota member of com.bla.cms.domain.Command

val outcome = newIncrementCommand(request).execute(parametersMap)

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

你可以:

  1. def execute(parameters: Map[String,String]):CommandResult添加到Command特质。

  2. newIncrementCommand(request)更改为RedisIncrementCommand而不是Command

  3. 使用newIncrementCommand(request)RedisIncrementCommand投放到asInstanceOf的结果。

  4. 我更喜欢1,这将是:

    trait Command {
      val captchaValidator: Validator
      val logger: Logging
      val properties = PropertiesHandler.readProperties(System.getProperty(PropertiesHandler.configFileNameKey))
    
      def execute(parameters: Map[String,String]): CommandResult  
      def executeInDatabase(parameters: Map[String,String]): CommandResult
    }