假设我正在编写一个函数function roundToSignificantFigures(num, n) {
if(num === 0) {
return 0;
}
var d = Math.ceil(Math.log10(num < 0 ? -num: num));
var power = n - parseInt(d);
var magnitude = Math.pow(10, power);
var shifted = Math.round(num*magnitude);
alert(shifted/magnitude);
return shifted/magnitude;
来从给定节点获取属性名称的属性值。
(Node, String) => Option[String]
有意义吗?你会如何修复/改进它?
答案 0 :(得分:2)
Scala在Node
类上定义了方法attribute
,但它们会返回Option[Seq[Node]]
,这需要进一步处理以获得String
。
所以我目前在我的代码中使用的东西非常相似:
implicit class XmlEnhancements(node: Node) {
def attributeOpt(attribute: String): Option[String] =
node.attribute(attribute) flatMap (_.headOption) map (_.text)
}
此外,由于Scala本身在xml.Node
类上定义了方法def \@(attributeName: String): String
,我相信在attributeOpt
别名下定义\@?
也是可以的:
implicit class XmlEnhancements(node: Node) {
def \@?(attribute: String): Option[String] =
node \@ attribute match {
case "" => None
case s => Some(s)
}
}