小编Jer*_*iho的帖子

常春藤定制网址解析器

我想在我的ivysettings.xml文件中创建自定义解析器:

<ivysettings>
    <settings defaultResolver="default"/>
    <resolvers>
        <chain name="default">
            <url name="scala-tools">
                <ivy pattern="http://scala-tools.org/repo-releases/[organisation]/[module]/[revision]/ivy-[revision].xml" />
                <artifact pattern="http://scala-tools.org/repo-releases/[organisation]/[module]/[revision]/[artifact]-[revision].[ext]"/>
                <artifact pattern="http://scala-tools.org/repo-releases/[organisation]/[module]/[revision]/[artifact].[ext]"/>
            </url>
            <!--<ibiblio name="ibiblio"/>-->
        </chain>
    </resolvers>
</ivysettings>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我只有一个UrlResolver会尝试在scala-tools repo中查找我的依赖项.如果我正确指定我的依赖项,那么 ivy将尝试在http://scala-tools.org/repo-releases/org.scala-lang/scala-library/2.8.0/scala-library-2.8.0中找到它. jarhttp://scala-tools.org/repo-releases/org.scala-lang/scala-library/2.8.0/scala-library.jar(是的,根据我在ivysettings.xml中的说明)显然,它找不到任何东西.为了让事情有效,我必须以这种方式指定依赖关系:

<ivy-module version="2.2">
    <info organisation="org.yoba" module="Yoba"/>
    <dependencies>
        <dependency org="org/scala-lang" name="scala-library" rev="2.8.0"/>
        <!--<dependency org="org.scala-lang" name="scala-library" rev="2.8.0"/>-->
        <dependency org="org/scala-lang" name="scala-compiler" rev="2.8.0"/>
        <!--<dependency org="org.scala-lang" name="scala-compiler" rev="2.8.0"/>-->
    </dependencies>
</ivy-module>
Run Code Online (Sandbox Code Playgroud)

问:如何改变工件模式/其他东西迫使常春藤使其工作正常?

1:http://scala-tools.org/repo-releases/ scala-tools repo

ant dependencies build-process ivy dependency-management

3
推荐指数
1
解决办法
2752
查看次数

FSC每次都重新编译

FSC每次都重新编译我的.scala文件,即使没有必要 - 我可以编译它两次而不需要在两次尝试之间编辑任何内容并重新编译它们!例如,我有2个文件

Hello.scala

class Hello{
  print("hello")
}
Run Code Online (Sandbox Code Playgroud)

和Tokens.scala:

abstract class Token(val str: String, val start: Int, val end: Int)
  {override def toString = getClass.getSimpleName + "(" + "[" + start + "-" + end + "]" + str + ")"}
class InputToken(str: String, start: Int, end: Int)
        extends Token(str, start, end)
 class ParsedToken(str: String, start: Int, end: Int, val invisible: Boolean)
        extends Token(str, start, end)
Run Code Online (Sandbox Code Playgroud)

当我要求ant从头编译项目时,我看到以下输出:

ant compile
init:
    [mkdir] Created dir: D:\projects\Test\build\classes
    [mkdir] Created dir: D:\projects\Test\build\test\classes

compile:
      [fsc] …
Run Code Online (Sandbox Code Playgroud)

scala compilation scalac

3
推荐指数
1
解决办法
699
查看次数

带有泛型返回类型的可选函数参数

你将如何实现通过正则表达式解析一些输入并将创建的字符串转换为其他类型的类?我的方法是:

class ARegex[T](regex:Regex, reform:Option[String => T]){
  def findFirst(input:String):Option[T] = {
    (regex.findFirstIn(input), reform) match{
      case (None, _) => None
      case (Some(s), None) => Some(s) // this won't compile because of type mismatch
      case (Some(s), Some(fun)) => Some(fun(s))
    }
  }
}

class BRegex[T](regex:Regex, reform:Option[String => T]) {
  def findFirst(input:String) = {  //returns Option[Any] - erasure
    (regex.findFirstIn(input), reform) match{
      case (None, _) => None
      case (Some(s), None) => Some(s)
      case (Some(s), Some(fun)) => Some(fun(s))
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

types scala

2
推荐指数
1
解决办法
859
查看次数

在scalacheck属性中使用specs匹配器

我正在尝试在scalacheck属性中使用specs mathers.例如,我有一个像这样工作的匹配器:

x must matchMyMatcher(y)
Run Code Online (Sandbox Code Playgroud)

当我想在scalacheck属性中使用此匹配器时,我执行以下操作:

import org.scalacheck._
import org.specs._
...
val prop = Prop.forAll(myGen){
    (x,y) => new matchMyMatcher(x)(y)._1
}
prop must pass
Run Code Online (Sandbox Code Playgroud)

不幸的是,在这种情况下,我删除了我在matcher中放置的调试信息,当属性失败时我需要它.是否有规定的方法在道具内使用匹配器?

specs scala scalacheck

2
推荐指数
1
解决办法
443
查看次数

创建可以使用单个或多个元素实例化的类作为Scala中的构造函数参数

我想拥有可以用list,array,seq,set,stack,queue等实例化的类.在我看来

class A
class B(elems:A*)
Run Code Online (Sandbox Code Playgroud)

应该处理这样的东西.

这是我的解决方案:

class A
class B(elems:Iterable[A]){
    def this(elem:A) = this(Seq(elem))
}
Run Code Online (Sandbox Code Playgroud)

你能建议任何改进吗?

collections scala

1
推荐指数
1
解决办法
118
查看次数

这个函数对于并发执行是否安全?

  def isSafe( i:Int) = {
    var count = i
    var acc = 0
    while(count!=0){
      acc += i*i
      count -= 1
    }
    acc
  }
Run Code Online (Sandbox Code Playgroud)

concurrency scala

1
推荐指数
1
解决办法
136
查看次数