javaCollection.toArray.map{foo}
javaCollection.toArray.foreach{foo}
Казалось бы в чём разница?.
На всякий случай хочется поинтересоваться, это вообще вменяемая конструкция?
val List(a,b,c) = "a$s$df".split("\\$").toList
Было аж 4 доклада: два по проектам конторы-организатора, один от jet brains про скала-плугин и один про squeryl.
Интересны имхо были только последние два. Рассказали, что idea стала лучше поддерживать скалку, что есть прикольные автодополнялки, рефакторилки, и конвертеры из кода с сахаром в код без оного. Про squeryl был просто обзор с примерами кода. Узнал пару хороших вещей, которые ещё не юзал, т.к. ещё плохо читал документацию. Жаль, что докладчик не юзал ничего другого, не мог сравнить.
А первые два доклады были ни о чём. Как-то в стиле "- Мы сделали так. — А почему? — Ну, так сложилось исторически". Показалось, что авторы недавно писали на раби с РоР, поэтому мыслили ещё теми шаблонами.
Также опрос показал, что из человек 20-30 в работе скалку используют меньше половины.
Причина:
val user = transaction { from(users)(u => where(u.login === login) select(u) ).single } // убрать transaction{}
Результат:
java.lang.RuntimeException: no session is bound to current thread, a session must be created via Session.create
and bound to the thread via 'work' or 'bindToCurrentThread'
...
Конечно, бывает всякое, но таких нежданчиков в либах я ещё не встречал.
val user = transaction { from(users)(u => where(u.login === login) select(u) ).single }
Столько сложностей из ничего.
Похоже, надо подключать редиску и уже её настраивать на сохранение в БД надолго. =\
Потыкал немножко Squeryl. Это такой ORM для скалки. Довольно простой, чтобы быстро накропать на нём несложное приложение. Больше провозился тупя над ошибкой в версии драйвера к H2 и сборкой всего нужного мне барахла с sbt-0.10.1. Да, ещё не допёр сразу до использования KeyedEntity, плюс там оно требует val id:<Type>. Без этого не заработает autoIncremented. А так всё просто:
package auth
import org.squeryl.PrimitiveTypeMode._
import org.squeryl.{KeyedEntity, Schema}
class User(val login: String, val password: String) extends KeyedEntity[Long] {
// def this() = this("", "")
val id:Long = 0
}
object Auth extends Schema {
val users = table[User]("users")
on(users)(it => declare(
it.id is(primaryKey, autoIncremented),
it.login is(unique, indexed, dbType("char(96)")),
it.password is(dbType("char(128)"))
))
}
//
Удобно, что схема лежит отдельно, и что в объекте схемы может быть объявлено несколько таблиц(тут сделать аналогично val users/on(users)).
1. circumflex-core (да, ведь cx — это "больше, чем orm"©)
2. ehcache (традиционный java кэш.. порадовало, хотел именно его поюзать)
3. c3p0 (для генерёжки схем базы.. я юзаю с h2, пока проблем не успел поймать)
Впрочем, если юзаете maven, то авторы для него кое-чего прикрутили. Я то пока тыкаю палочкой, чтобы разобраться. В случае чего, конечно, лучше заглянуть в pom.xml
groups.google.com
Пришёл человек, объяснил в чём проблема circumflex-а. Ему ответили, что всем пофиг на его проблемы, главное, что разрабам нравится. А то, что оно неюзабельно для всех остальных — это пофиг.
Может прожект и не проэтосамят, но аудиторию они уже теряют. А потом ещё будут жаловаться, что их никто не понимает, не помогает, не любит, что все идиоты и не понимают их замыслов. Ясен пень, если оно даже не собирается, поймёшь тут.
Нда, как-то нелепо это всё. Пример окукливания разработчиков: Пришёл человек, объяснил в чём проблема circumflex-а. Ему ответили, что всем пофиг на его проблемы, главное, что разрабам нравится. А то, что оно неюзабельно для всех остальных — это пофиг.
Может прожект и не проэтосамят, но аудиторию они уже теряют. А потом ещё будут жаловаться, что их никто не понимает, не помогает, не любит, что все идиоты и не понимают их замыслов. Ясен пень, если оно даже не собирается, поймёшь тут.
Scala collections, Pattern matching, Scala type parameters, Case classes, Nested functions, Polymorphic Methods, Currying, Higher-Order Functions, Traits, Unified Types, Local Type Inference, Call-by-name evaluation.
Я вот не понимаю, почему там список синтаксических конструкций?. Как можно вообще заявлять о знании языка, если таких достаточно базовых вещей не знаешь?. Ладно там карринг, но трейты! Странно, в общем, "знание цикла for от 3х лет".
Пока обрулил это копипастой сорсов jar-ника в сорсы проекта. Некрасиво, но зато работает. Как бы это красиво исправить?.
И вот эту багу я не осилил: code.google.com . Взял более свежую скалку.
нестабильный (~amd64) dev-lang/scala-2.7.7
свежесть в каждом глотке..