Scala 电梯网络框架干式调度

Scala 电梯网络框架干式调度,scala,dry,dispatcher,lift,Scala,Dry,Dispatcher,Lift,我有一个图像类: class Image extends LongKeyedMapper[Image] with IdPK with Logger { 哪个覆盖了HTML方法: override def toHtml = <img src={"/gallery/image/%s/%s/%s/%s" format (slug.is, "fit", 100, 100)} /> 正如您所看到的,这是一种不枯燥的方法,因为您必须定义两次URL(/gallery/image) 可以把它

我有一个图像类:

class Image extends LongKeyedMapper[Image] with IdPK with Logger {
哪个覆盖了HTML方法:

override def toHtml =
  <img src={"/gallery/image/%s/%s/%s/%s" format (slug.is, "fit", 100, 100)} />
正如您所看到的,这是一种不枯燥的方法,因为您必须定义两次URL(/gallery/image)

可以把它弄干吗?你能从LiftRules什么地方找到路吗

提前感谢,, Etam.

电梯名单上的回答是:

简言之,你:

将公共事物(在本例中为路径)封装在对象中:

object ImageGallery {
  val path = "gallery" :: "image" :: Nil
  val pathLen = path.length
  def prefix = path.mkString("/", "/", "/")
}
创建一个自定义的unapply方法,该方法允许您在分派方法中使用模式匹配中的对象

object ImageGallery {
  // ...
  def unapply(in: List[String]): Option[List[String]] = 
    Some(in.drop(pathLen)).filter(ignore => in.startsWith(path))
}
您的代码现在是:

<img src={ImageGallery.prefix+"%s/%s" ...}>

有关更多建议,请参阅消息线程。

我对Lift一无所知,但我不认为这是在重复您的SEF。我觉得它更像
val a=“foo”;println(a)
,我确实提到了
a
两次,一次说
a
做什么,一次叫它。我想URL字符串的创建方式可能存在错误,但它仍然足够简单……Django-HttpResponseRedirect(reverse('arch-summary',args=[1945])中有一些我喜欢的东西。相反的方法是我正在寻找的。
<img src={ImageGallery.prefix+"%s/%s" ...}>
case Req(ImageGallery(slug :: method :: width :: height :: _), _, _) => // ...