这将是一个快速的一个安全的字符串转换为数值型的方式,而当转换失败提供一个默认值?
我尝试使用通常推荐的方法,即使用Exceptions:
implicit class StringConversion(val s: String) {
private def toTypeOrElse[T](convert: String=>T, defaultVal: T) = try {
convert(s)
} catch {
case _: NumberFormatException => defaultVal
}
def toShortOrElse(defaultVal: Short = 0) = toTypeOrElse[Short](_.toShort, defaultVal)
def toByteOrElse(defaultVal: Byte = 0) = toTypeOrElse[Byte](_.toByte, defaultVal)
def toIntOrElse(defaultVal: Int = 0) = toTypeOrElse[Int](_.toInt, defaultVal)
def toDoubleOrElse(defaultVal: Double = 0D) = toTypeOrElse[Double](_.toDouble, defaultVal)
def toLongOrElse(defaultVal: Long = 0L) = toTypeOrElse[Long](_.toLong, defaultVal)
def toFloatOrElse(defaultVal: Float = 0F) = toTypeOrElse[Float](_.toFloat, defaultVal)
} …
Run Code Online (Sandbox Code Playgroud) 我理解通常在访问字段或超出闭包范围的方法时出现的"任务不可序列化"问题.
为了解决这个问题,我通常会定义这些字段/方法的本地副本,这样就无需序列化整个类:
class MyClass(val myField: Any) {
def run() = {
val f = sc.textFile("hdfs://xxx.xxx.xxx.xxx/file.csv")
val myField = this.myField
println(f.map( _ + myField ).count)
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我在run方法中定义嵌套函数,则无法序列化:
class MyClass() {
def run() = {
val f = sc.textFile("hdfs://xxx.xxx.xxx.xxx/file.csv")
def mapFn(line: String) = line.split(";")
val myField = this.myField
println(f.map( mapFn( _ ) ).count)
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白,因为我认为"mapFn"将在范围内...更奇怪的是,如果我将mapFn定义为val而不是def,那么它的工作原理如下:
class MyClass() {
def run() = {
val f = sc.textFile("hdfs://xxx.xxx.xxx.xxx/file.csv")
val mapFn = (line: String) => line.split(";")
println(f.map( mapFn( _ ) ).count)
}
} …
Run Code Online (Sandbox Code Playgroud) 在XTemplate的文档中,{#}可用于获取当前数组索引.
当我在xlist的itemTpl中使用它时,我总是得到1而不是索引:
{
xtype: 'list',
store: 'myStore',
itemTpl:new Ext.XTemplate(
'<tpl for=".">',
'<div>Item n°{#1}</div>',
'</tpl>'
),
}
Run Code Online (Sandbox Code Playgroud)
即使我的商店包含多个商品,也始终生成"商品编号1".
难道我做错了什么 ?
我正在创建一个列表,我将通过json数据从列表中添加项目.我面临的问题是我有一个删除按钮,点击按钮后,必须从商店中删除列表中的所选项目.
这就是我尝试过的
{
text: '',
id: 'deletenotesBtn',
iconCls:'trash',
iconMask: true,
ui:'action',
handler: function(){
var itemSelected = Ext.getCmp('noteslist').getSelection().remove();
// this.remove(this, true);
alert('item deleted');
}
Run Code Online (Sandbox Code Playgroud)
关于我如何实现它的任何建议?