谁能帮我告诉我如何使用scala的ObservableSet 特性?
非常感谢你提前
关注这个问题,我试图弄清楚如何在一个对象上调用一个方法.相关定义是:
trait ThirdParty { def invoke = println("right") }
trait WeatherIcon { def invoke = println("wrong") }
class MyClass {
object objA extends ThirdParty
object objB extends WeatherIcon
}
Run Code Online (Sandbox Code Playgroud)
我有一个Symbol为objA这样的:
import reflect.runtime.universe._
val stuff = typeOf[MyClass].members.filter(_.isValue).filter(_.typeSignature <:< typeOf[ThirdParty])
Run Code Online (Sandbox Code Playgroud)
返回一个Iterable元素,所以让我们说:
val objASymbol = stuff.head.asModuleSymbol
Run Code Online (Sandbox Code Playgroud)
然后我根据这个问题尝试了这个:
val mirror = runtimeMirror(getClass.getClassLoader)
mirror.reflectModule(objASymbol)
Run Code Online (Sandbox Code Playgroud)
这导致了主题上引用的错误消息:
java.lang.Error: this is an inner module, use reflectModule on an InstanceMirror to obtain its ModuleMirror
at scala.reflect.runtime.JavaMirrors$JavaMirror.reflectModule(JavaMirrors.scala:118)
at scala.reflect.runtime.JavaMirrors$JavaMirror.reflectModule(JavaMirrors.scala:60)
Run Code Online (Sandbox Code Playgroud)
问题是我无法弄清楚这条错误信息告诉我要做什么!
我正在寻找collectscala 2.7中的方法,但我似乎找不到适用的调用.有没有相当于collect我可以在scala中使用的东西?
要清楚我想要从列表中过滤元素并将过滤后的元素映射到新类型.
我的意思是:
scala> class Bounded[T <: String](val t: T)
defined class Bounded
scala> val b: Bounded[_] = new Bounded("some string")
b: Bounded[_] = Bounded@2b0a141e
scala> b.t
res0: Any = some string
Run Code Online (Sandbox Code Playgroud)
为什么res0的类型是Any而不是String?它肯定知道bt至少是一个String.写作
val b: Bounded[_ <: String] = new Bounded("some string")
Run Code Online (Sandbox Code Playgroud)
有效,但对于类本身的声明而言是多余的.
试用一个简单的解析器组合器,我遇到了编译错误.
我想解析一下 - "Smith,Joe"进入Name对象,如Name(Joe,Smith).我想这很简单.
这是与之相关的代码:
import util.parsing.combinator._
class NameParser extends JavaTokenParsers {
lazy val name: Parser[Name] =
lastName <~ "," ~> firstName ^^ {case (l ~ f) => Name(f, l)}
lazy val lastName = stringLiteral
lazy val firstName = stringLiteral
}
case class Name(firstName:String, lastName: String)
Run Code Online (Sandbox Code Playgroud)
我正在测试它
object NameParserTest {
def main(args: Array[String]) {
val parser = new NameParser()
println(parser.parseAll(parser.name, "Schmo, Joe"))
}
}
Run Code Online (Sandbox Code Playgroud)
获取编译错误:
error: constructor cannot be instantiated to expected type;
found : NameParser.this.~[a,b]
required: java.lang.String
lazy val …Run Code Online (Sandbox Code Playgroud) 我有很多记录,下面的结构保存在mongodb中.
case class User(_id:ObjectId = new ObjectId, email:String, role:String, employeeID:Int, createdOn:DateTime)
Run Code Online (Sandbox Code Playgroud)
如何使用salat在mongodb上执行"IN"之类的查询?
例如
val data = UserDAO.find(MongoDbObject("employeeID" -> List(2,4,5)) // (NOT working)
Run Code Online (Sandbox Code Playgroud)
谢谢Pawan
在以下Perl模式中:
while(<>) {
# do stuff
}
Run Code Online (Sandbox Code Playgroud)
有没有办法获取目前打开的文件的名称?
为了清楚起见,我希望收到很多args,这样循环就会处理多个文件.我想要当前正在处理的文件的名称.
我的一个小程序刚刚爆发,因为看起来,我以编程方式浏览的网站现在假定Java请求来自手机,我正在寻找的链接不在他们的移动页面上.
所以我想伪造Internet Explorer访问权限.我如何用java.net做到这一点?
首先,我有特点:
import _root_.com.thoughtworks.selenium._
import org.scalatest.matchers.ShouldMatchers
import org.scalatest.matchers.ShouldMatchers._
trait SeleniumField extends ShouldMatchers {
val name : String
def selenium : Selenium
def text : String = { return selenium.getValue(name) }
def is(v:String) : Boolean = { this.value equals v }
def set(v:String) = { selenium.`type`( name , v ) }
}
Run Code Online (Sandbox Code Playgroud)
然后我用这个特性创建scala类:
import _root_.com.thoughtworks.selenium._
class WebAppField(sel:Selenium, nam: String) extends SeleniumField {
def selenium = sel
override val name = nam
}
Run Code Online (Sandbox Code Playgroud)
然后当我尝试在代码中使用它时:
val rodzaj = new WebAppField(selenium, "RODZAJ")
rodzaj text should …Run Code Online (Sandbox Code Playgroud) scala ×7
scala-2.8 ×2
collections ×1
http ×1
http-headers ×1
java ×1
list ×1
macros ×1
mongodb ×1
perl ×1
pipe ×1
salat ×1
scala-2.10 ×1
set ×1
unix ×1