Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >从scala中检索值

从scala中检索值
EN

Stack Overflow用户
提问于 2017-08-13 02:24:46
回答 2查看 2K关注 0票数 2

我试图从字符串中检索用于创建enum的case对象。

参考Extracting field from Some in Scala

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sealed trait Mapping {def code: Int;def desc: Symbol}

object types {

  case object TypeA extends Mapping {
    val code = 0;
    val desc = 'A
  }

  case object TypeB extends Mapping {
    val code = 1;
    val desc = 'B
  }

  val values=List(TypeA,TypeB)
  def getType(desc: Symbol) =
    values.find(_.desc == desc)
 }

下面的代码使我能够从Some(TypeA)检索值

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     var s=types.getType('A)

方法1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  s match{
    case Some(value)=>print(value.code)
  }

方法2

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     print(s.fold {-1} { x => x.code })

以下是查询

  1. 我不清楚第二种方法,有人能解释一下折叠在这里是如何工作的吗?
  2. 如果找不到匹配,我希望使用默认类型case对象来表示None
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-13 02:38:32

我不清楚第二种方法,有人能解释一下折叠在这里是如何工作的吗?

这是fold的签名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def fold[B](ifEmpty:B)(f: (A)B): B

第一个参数ifEmpty是在Option为空的情况下将返回的“默认值”值,而第二个参数f是在选项包含的值上执行的函数(如果它存在的话)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
opt.fold(a)(f)

则等价于

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
opt.map(f).getOrElse(a)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
opt match {
  case None => a
  case Some(v) => f(v)
}

如果找不到匹配,我希望使用默认类型case对象来表示None。

你可以这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sealed trait Mapping {def code: Int;def desc: Symbol}

object types {

  case object TypeA extends Mapping {
    val code = 0;
    val desc = 'A
  }

  case object TypeB extends Mapping {
    val code = 1;
    val desc = 'B
  }

  case object DefaultType extends Mapping {
    val code = -1
    val desc = 'Default
  }

  val values = List(TypeA,TypeB)
  def getType(desc: Symbol): Mapping =
    values.find(_.desc == desc).getOrElse(DefaultType)
 }
票数 6
EN

Stack Overflow用户

发布于 2017-08-13 05:37:47

  1. 如果您只想打印内容,那么方法是s.foreach(println(_.code))
  2. S匹配{ case Some(value)=>print(value.code) } 是个坏主意,因为当sNone时,它会崩溃。您应该添加一个case子句来匹配这种情况(但在本例中,您最好只使用foreach )。
  3. s.fold {-1} { x => x.code }等价于s.map(_.code).getOrElse(-1)
  4. 如果您想要默认类型而不是None,则只需执行println(s.getOrElse(DefaultType).code)
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45659351

复制
相关文章
Scala 字符串插值: s插值
val pageLevelId = 3 val pageLevelName = "entrance" val funnel = Map(2 -> List(11111), 4 -> List(7), 3 -> List(402, 403), 5 -> List(1572, 1574)) val bg = s"$pageLevelName.page_id = 254" :: s"$pageLevelName.page_value in('%s')".format(funnel(pageLevelId).
大数据工程师-公子
2019/03/14
1.6K0
快速学习-Scala值类型转换
当Scala程序在进行赋值或者运算时,精度小的类型自动转换为精度大的数据类型,这个就是自动类型转换(隐式转换)。
cwl_java
2020/02/27
1.5K0
快速学习-Scala值类型转换
在Asp.Net中从sqlserver检索(retrieve)图片
介绍: 这篇文章是我写的"如何把图片存入sqlServer中"的后续。我建议你在读这篇文章之前先看看那篇。 和存储图片相比,读取图片就要简单多了。输出一副图片我们要做的就是使用Response对象的BinaryWrite方法。 同时设置图片的格式。在这篇文章中,我们将讨论如何从SqlServer中检索图片。 并将学习以下几个方面的知识. ·如何设置图片的格式? ·如何使用BinaryWrite方法。
Java架构师必看
2021/03/22
1.5K0
【Scala篇】--Scala中的函数
Scala中的函数还是比较重要的,所以本文章把Scala中可能用到的函数列举如下,并做详细说明。
LhWorld哥陪你聊算法
2018/09/13
1.5K0
【Scala篇】--Scala中的函数
spark开发基础之从Scala符号入门Scala
问题导读 1.Scala中有哪些常见符号? 2.本文讲了哪些符号? 3.你对符号的理解是什么? 4.<-,->,=>,Int=,_ 它们含义是什么?用在什么地方? 当我们学习spark的时候,我们知道spark是使用Scala语言开发的,由于语言是相通的,所以对于传统程序员【Java,.net,c等】,我们能看懂Scala程序是没有问题的。但是当我们看到它的时候,却傻眼了。那么多符号,左箭头,右箭头,下划线等等搞得摸不着头脑。 看来如果想顺利的学习,我们必须学一下Scala了。很多都是从变量定义,函
用户1410343
2018/03/27
2.5K1
spark开发基础之从Scala符号入门Scala
SQL学习之空值(Null)检索
在创建表表,我们可以指定其中的列包不包含值,在一列不包含值时,我们可以称其包含空值null。 确定值是否为null,不能简单的检查是否=null。select语句有一个特殊的where子句,可用来检查
郑小超.
2018/01/24
1.8K0
SQL学习之空值(Null)检索
基于内容的图像检索技术:从特征到检索
构建词库是离线操作,主要对目标数据集中的文本进行解析提取词干信息,建立当前数据集的词库,然后基于词库,对数据集中所有文档提取本文特征。构建词库在整个检索系统生命周期开始阶段实施,一般情况仅执行一次,是针对目标检索文本数据集进行的非频繁性操作。
公众号机器学习与AI生成创作
2020/12/08
1.6K0
基于内容的图像检索技术:从特征到检索
Scala Essentials: 字符串内插值
字符串插值 Scala是一门高度可扩展性的程序设计语言,保持微小的内核,但具有无穷大的扩展能力。例如,「字符串内插」功能,Scala语言并不是原生地支持该特性,而是通过类库的扩展来实现的。 println(s"$name is $age years old.") 相对于Ruby的字符串内插功能,Scala在字符串前加入s的前缀,显得不是那么优雅,但如此的设计换取了良好的可扩展性: 支持其他形式的字符串的内插功能,例如s, f, raw; 支持用户自定义字符串的内插功能; 剖析本质 package s
Albert陈凯
2018/04/04
8900
Scala 高阶(九):Scala中的模式匹配
本次主要分享Scala中关于模式匹配的内容,Scala中的模式匹配类似于Java中的switch语法,但是Scala在基于Java的思想上补充了特有的功能。
百思不得小赵
2022/12/01
1.5K0
Scala基础入门(四)Scala中变量、常量
我们先来看看Java中的变量与常量。在Java中,常量是指在程序运行期间值不能被改变的量,使用final关键字修饰。如
青山师
2023/05/04
2250
Scala 高阶(十):Scala中的异常处理
throws与try…catch如何选择? 需要上报异常使用throws,需要捕获异常时使用try…catch进行捕获!!
百思不得小赵
2022/12/01
1.1K0
Scala 高阶(十):Scala中的异常处理
改进 Elastic Stack 中的信息检索:混合检索
在我们的上一篇博文中,我们介绍了 Elastic Learned Sparse Encoder,这是一种经过训练可有效进行零样本文本检索的模型。Elasticsearch ®还具有强大的词汇检索功能和丰富的工具来组合不同查询的结果。在本博客中,我们介绍了混合检索的概念,并探讨了 Elasticsearch 中可用的两种具体实现。特别是,我们探索如何通过使用倒数排名融合和加权分数和将弹性学习稀疏编码器与 BM25 相结合来提高其性能。
点火三周
2023/07/20
2.1K0
改进 Elastic Stack 中的信息检索:混合检索
Scala中的Collection
Traversable 遍历 Iterable 迭代 Set无序集合 Sequence序列 Map映射
ZONGLYN
2019/08/08
1.2K0
tf34:从ckpt中读取权重值
在TensorFlow里,提供了tf.train.NewCheckpointReader来查看model.ckpt文件中保存的变量信息。
MachineLP
2022/05/09
1.1K0
tf34:从ckpt中读取权重值
从Scala和Python的“shell”说起
在《写给Python和Scala的碎碎念》的系列的开篇,让我们从最简单的交互式“shell”开始,一步步来看看Python和Scala的对于同一件事体现出来的设计理念。 · 使用Scala解释器 Scala和Python都可以在shell页面输入scala或者python进入交互页面 。Scala作为一门静态语言,拥有着属于自己的“shell”,可以让你快速的检验一小段Scala代码。Python也拥有着自己的“shell”,使用方式和Scala一样,不同的就是Python还拥有着IPython这样强化过的“shell”。 来试试“shell”带来的方便吧!首先在“shell”里分别输入1+1 scala: scala> 1+1 res0: Int = 2 scala> res0 res1: Int = 2
哒呵呵
2018/08/06
4060
自定义scala 字符串插值
前言 字符串插值是 scala 2.10.0 开始引入的一个新的概念,就是能够让用户在字符串中嵌入变量引用。 从而可以让用户用数据来构造字符串。 比如 s interpolator,允许直接在字符串中使用变量和计算表达式: val name = "Ldpe2G" println(s"Hello, $name")  // Hello, Ldpe2G println(s"1 + 1 = ${1 + 1}") // 1 + 1 = 2 已经提供的interpolator还有f, raw等 参考:http://do
Ldpe2G
2018/06/29
1.2K0
Scala中的集合类型
----------目录--------------------------------------------------------- 1.Scala简介和安装 2.Scala语法介绍 3.Scala的函数 4.Scala中的集合类型 ------------------------------------------------------------------------------------------------------------- Scala中的集合类型     Scala提供了一套
云飞扬
2018/05/11
4.2K0
Scala中的闭包
除此之外,Scala还支持引用其他地方定义的变量:(x: Int) => x + more,这个函数将more也作为入参,不过这个参数是哪里来的?从这个函数的角度来看,more是一个自由变量,因为函数字面量本身并没有给more赋予任何含义。相反,x是一个绑定变量,因为它在该函数的上下文里有明确的定义:它被定义为该函数的唯一参数。如果单独使用这个函数字面量,而没有在任何处于作用域内的地方定义more,编译器将报错:
大蟒传奇
2018/08/14
8740
Scala中调用Java类
Note: 1. Scala中无参函数调用的时候可以省略括号 2. Scala中推荐使用Option类,而不是Java中的obj != null这样的判断
卡尔曼和玻尔兹曼谁曼
2019/01/22
3K0
Scala中的偏函数
艺术地说,Scala中的Partial Function就是一个“残缺”的函数,就像一个严重偏科的学生,只对某些科目感兴趣,而对没有兴趣的内容弃若蔽履。Partial Function做不到以“偏”概全,因而需要将多个偏函数组合,最终才能达到全面覆盖的目的。所以这个Partial Function确实是一个“部分”的函数。 对比Function和Partial Function,更学术味的解释如下: 对给定的输入参数类型,函数可接受该类型的任何值。换句话说,一个(Int) => String 的函数可以接收
张逸
2018/03/07
2.6K0

相似问题

Scala :从url检索多个值

13

从Scala枚举值中检索名称属性

10

在scala中混淆从LinkedHashMap检索值

14

在scala中从字符串中检索值

34

在scala中检索属性值

141
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文