我仍然是Scala的新手,我几乎每天都在发现新的有趣的做事方式,但它们并不总是明智的,有时候已经存在于语言中作为一种结构而我只是不喜欢知道他们.所以,有了这个序言,我正在检查一个给定的字符串是否完全由数字组成,所以我在做:
def isAllDigits(x: String) = x.map(Character.isDigit(_)).reduce(_&&_)
这是明智的还是不必要的愚蠢?有更好的方法吗?调用x.toInt并捕获异常更好,还是不那么惯用?是否存在性能优势/劣势?
我是Scala的新手,我正在使用2.9.1,而我正试图了解如何使用部分功能.我对curried函数有一个基本的了解,我知道部分函数有点像curried函数,它们只有2nary或者其他类似函数.你可以告诉我,我有点绿.
看起来在某些情况下,比如XML过滤,能够部分功能是非常有利的,所以我希望能更好地理解如何使用它们.
我有一个使用RewriteRule结构的函数,但我需要它使用两个参数,而RewriteRule结构只需要一个,或一个部分函数.我认为这是我认为它有用的案例之一.
任何建议,链接,智慧的话等欢迎!
到目前为止,答案非常好,并且澄清了我的一些基本误解.我认为他们也解释了我在哪里挣扎 - 我想也许发布一个更具体的新问题会有所帮助,所以我也会这样做.
我刚刚开始使用play,我修改了我正在进行SQL读取的方式,现在我收到以下错误:
[Exception: DB plugin is not registered.]
我给这个类的代码是:
package models
import play.api.db._
import play.api.Play.current
import anorm._
case class Housing(id: Long, rent: String, address: String, street0: String, street1: String, neighbourhood: String)
object Housing {
  def all(): List[Housing] = DB.withConnection { implicit c =>
    SQL("select * from housing")().map { row =>
      Housing(row[Long]("id"), row[String]("rent"), row[String]("address"), row[String]("street0"),
        row[String]("street1"), row[String]("neighbourhood"))
    }.toList
  }
  def create(rent: String, address: String, street0: String, street1: String, neighbourhood: String) {}
  def delete(id: Long) {}
}
我不确定这甚至是最好的方法,但使用〜链似乎我最终会复制一堆东西.
我试图看一些JPA orm.xml的使用示例.如果有人指导我链接,
我正在制作一个Monoid用于组合重试执行的策略,而RetryExecutor [T]是基于类型.我已经定义了以下基类型和一个monoid:
trait RetryExecutor[C] {
  def retry[T](f: C => T)(context: C): T
  def predicate: Option[Throwable]
  def application: Unit
  val retryEligible: PartialFunction[Throwable, Boolean]
}
object RetryExecutor {
  implicit def retryExecutorMonoid[A] = new Monoid[RetryExecutor[A]] {
  ...
}
和一些基本类型,如:
case class LinearDelayingRetryExecutor[C](delayInMillis: Long)(val retryEligible: PartialFunction[Throwable, Boolean]) extends RetryExecutor[C] {
  override def predicate: Option[Throwable] = None
  override def application = Thread.sleep(delayInMillis)
}
case class RetryWithCountExecutor[C](maximumRetries: Int)(val retryEligible: PartialFunction[Throwable, Boolean])(implicit val logger: Logger) extends RetryExecutor[C] {
  var remainingTries = maximumRetries + 1
  override def application: …我正在尝试测试用户登录的典型控制器流程.与大多数登录系统一样,存在扩展关系,Grails文档完全没用.它没有一个与典型用法实际相关的实例,并且是一个功能完整的示例.
我的测试看起来像这样:
@TestFor(UserController)
class UserControllerTests extends GroovyTestCase {
    void testLogin() {
        params.login = [email: "test1@example.com", password: "123"]
        controller.login()
        assert "/user/main" == response.redirectUrl
    }
}
控制器执行:
def login() {
    if (!params.login) {
        return
    }
    println("Email " + params.login.email)
    Person p = Person.findByEmail(params?.login?.email)
    ...
}
失败的是:
groovy.lang.MissingMethodException:没有方法签名:immigration.Person.methodMissing()适用于参数类型:()值:[]
println中显示了正确的数据,但无法调用该方法.
测试套件不能整体使用模拟,因为有数据库触发器被调用,其结果需要进行测试.
奇怪的是,如果我在测试中直接调用该方法,它可以工作,但在控制器中调用它不会.
对于更新:我直接从grails命令重新生成测试,并添加了@Test注释:
    @TestFor(UserController)
    class UserControllerTests extends GroovyTestCase {
        @Test
        void testLogin() {
            params.login = [email: "test1@example.com", password: "123"]
            Person.findByEmail(params.login.email)
            controller.login()
        }
    }
如果我使用grail test-app -integration UserController运行它,这是有效的
虽然结果没有正确填充 - 响应为空,flash.message为null,即使它应该有一个值,redirectedUrl为null,内容主体为空,视图也是如此.
如果我删除@TestFor注释,它甚至没有丝毫的作用.它没有告诉我'params'不存在.
在另一个测试中,我有两种方法.第一个方法运行,找到Person.findAllByEmail(),然后第二个方法运行,找不到Person.findAllByEmail并崩溃类似的错误 - 方法丢失. …