Есть ли в Scala аналог метода «возврата» Rails?

В Rails можно было бы использовать:

returning Person.create do |p|
  p.first_name = "Collin"
  p.last_name = "VanDyck"
end

Избегая этого:

person = Person.create
person.first_name = "Collin"
person.last_name = "VanDyck"
person

Я думаю, что первый способ чище и менее повторяющийся. Я обнаружил, что создаю этот метод в своих проектах Scala:

def returning[T](value: T)(fn: (T) => Unit) : T = {
  fn(value)
  value
}

Я знаю, что он имеет несколько ограниченную полезность из-за тенденции объектов быть неизменными, но, например, при работе с Lift использование этого метода в классах Mapper работает довольно хорошо.

Есть ли в Scala аналог «возврата», о котором я не знаю? Или есть аналогичный способ сделать это в Scala, более идиоматичный?

5
задан Collin 22 October 2010 в 12:51
поделиться