object NoSense {
def main(args: Array[String]) {
val value = "true" match {
case value @ (IntValue(_) | BooleanValue(_)) => value
}
require(value == true)
}
}
class Value[T](val regex: Regex, convent: String => T) {
def unapply(value: String): Option[T] = value match {
case regex(value, _*) => Some(convent(value))
case _ => None
}
}
object IntValue extends Value[Int]("[0-9]+".r, _.toInt)
object BooleanValue extends Value[Boolean]("((true)|(false))".r, _.toBoolean)
Run Code Online (Sandbox Code Playgroud)
该require在main方法将失败.
但是这个还可以
def main(args: Array[String]) {
val value = "true" match …Run Code Online (Sandbox Code Playgroud) 我有一个关于从Jmeter中的html响应数据中获取某个值的问题.我一直在尝试正则表达式和xpath提取器(见下文),但没有运气.
这是我收到的响应数据的一部分:
<table border="0" cellpadding="2" cellspacing="1" style="border-collapse: collapse" id="AutoNumber2" bordercolorlight="#999999" bordercolordark="#999999" width="100%">
<tr>
<td class="head" align="center" colspan="2">Routing Sheet</td>
</tr>
<tr class="altrow">
<td align="right" width="50%" class="formtext">Today's Date:</td>
<td valign="top" width="50%" class="formtext">06/19/2012</td>
</tr>
<tr class="altrow">
<td align="right" width="50%" class="formtext"> HCSC Received Date:</td>
<td valign="top" width="50%" class="formtext">06/19/2012</td>
</tr>
<tr class="tablerow">
<td align="right" width="50%" class="formtext"> Package Log Date:</td>
<td valign="top" width="50%" class="formtext">06/19/2012 04:21PM</td>
</tr>
<tr class="altrow">
<td align="right" width="50%" class="formtext"> Group Specialist:</td>
<td valign="top" width="50%" class="formtext">WATTS, JOHN</td>
</tr>
<tr class="tablerow">
<td align="right" width="50%" class="formtext"> …Run Code Online (Sandbox Code Playgroud) 我刚刚发现我的提取器中的unapply由于某种原因被调用了两次.任何人都知道为什么,以及如何避免它?
val data = List("a","b","c","d","e")
object Uap {
def unapply( s:String ) = {
println("S: "+s)
Some(s+"!")
}
}
println( data.collect{ case Uap(x) => x } )
Run Code Online (Sandbox Code Playgroud)
这会产生输出:
S: a
S: a
S: b
S: b
S: c
S: c
S: d
S: d
S: e
S: e
List(a!, b!, c!, d!, e!)
Run Code Online (Sandbox Code Playgroud)
最后的结果很好,但在我的真实程序中,unapply是非平凡的,所以我当然不想把它叫两次!
我正在尝试使用NetBeans 在Java https://github.com/drewnoakes/metadata-extractor中将该库用于图像元数据提取。
我将文件metadata-extractor-2.7.0.jar导入到项目的jar文件夹中,就像自述文件所述,我只是这样做:
File file = fc.getSelectedFile ();
try {
Metadata metadata = ImageMetadataReader.readMetadata(file);
} catch ( ImageProcessingException ex ) {
Logger.getLogger ( UserInterface.class.getName() ).log ( Level.SEVERE, null, ex );
} catch ( IOException ex ) {
Logger.getLogger ( UserInterface.class.getName() ).log ( Level.SEVERE, null, ex );
}
Run Code Online (Sandbox Code Playgroud)
但我总是得到
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/adobe/xmp/XMPException
at com.drew.imaging.jpeg.JpegMetadataReader.<clinit>(Unknown Source)
at com.drew.imaging.ImageMetadataReader.readMetadata(Unknown Source)
at com.drew.imaging.ImageMetadataReader.readMetadata(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
开始使用此库之前,需要在Netbeans中进行配置吗?
当提取器返回时,为什么我不能在@ -style中绑定变量Option[<Type>]?即这个不起作用:
object IsUpperCase {
def unapply(s: String): Option[String] = {
if (s.toUpperCase() == s) {
Some(s)
} else {
None
}
}
}
val s = "DuDu@qwadasd.ru"
s match {
case u @ IsUpperCase() => println("gotcha!") // what? "wrong number of arguments for object IsUpperCase"?
case _ =>
}
Run Code Online (Sandbox Code Playgroud)
但是这个有效!
val s = "DuDu@qwadasd.ru"
s match {
case IsUpperCase(u) => println("gotcha!")
case _ =>
}
Run Code Online (Sandbox Code Playgroud)
另一方面,如果IsUpperCase看起来像这样:
object IsUpperCase {
def unapply(s: String): Boolean = { …Run Code Online (Sandbox Code Playgroud) 是否可以在 JSON 路径提取器表达式中使用输入变量?
我尝试过表达$.[${someInputVariable}].name,但没有成功。
数据格式:
[
{name=a},
{name=b},
{name=c}
]
Run Code Online (Sandbox Code Playgroud)
例如,如果${inputVariable}设置为 1,我希望表达式返回“b”。
到目前为止我发现的所有示例都有硬编码的搜索值,例如$.[1].name或$..[?(@.name == 'Smith')]