Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >由con运算符创建的Scala类型的集合

由con运算符创建的Scala类型的集合
EN

Stack Overflow用户
提问于 2018-06-30 06:22:47
回答 2查看 317关注 0票数 0

哪些类型的集合是由cons操作符创建的?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1::2::Nil
// println((1::2::Nil).getClass)
// class scala.collection.immutable.$colon$colon

"abc"::1::2::Nil
// println(("abc"::1::2::Nil).getClass)
// class scala.collection.immutable.$colon$colon

val x:List[Int] = 1::2::Nil
// println(x.getClass)
// class scala.collection.immutable.$colon$colon

这使得列表看起来可以同时包含string和Int。但是,这在“Scala中的编程”中被特别指出,该列表包含了同构对象。

与列表一样,元组是不可变的,但与列表不同,元组可以包含不同类型的元素。虽然列表可能是ListInt或ListString,但元组可以同时包含整数和字符串。

我认为在运行时,由于类型擦除,我们会看到相同的类型。如果是这样的话,那么使用con运算符生成的列表/集合的正确类型是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-30 07:14:57

您可以签出:: (cons)方法的签名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def ::[B >: A] (x: B): List[B] =
  new scala.collection.immutable.::(x, this)

这意味着,只要BA (当前类型的列表元素)的超级类型,您就可以在其中添加任何元素,生成的列表中的所有元素都将被键入为B。因此Scala将选择最常见的超级类型。在这个特殊的例子中,它将是Any,它是Scala的根类型(类似于Object中的Java)。如果您有一个更具体的通用超级类型,Scala将努力使用它而不是Any

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> class Animal 
> class Cat extends Animal 
> class Dog extends Animal 
> new Cat :: new Cat :: Nil 
res3: List[Cat] = List(ammonite.$sess.cmd1$Cat@2b974137, ammonite.$sess.cmd1$Cat@71734463)
> new Dog :: res3 
res4: List[Animal] = List(ammonite.$sess.cmd2$Dog@79f3f34c, ammonite.$sess.cmd1$Cat@2b974137, ammonite.$sess.cmd1$Cat@71734463)
票数 3
EN

Stack Overflow用户

发布于 2018-06-30 07:01:42

Scala有一个叫做"subytping“的东西。列表的元素类型将是所有单个元素类型的公共超类型。

在第一个例子中,推断的类型是List[Int],在第二个例子中是List[Any]IntString都是List[Any]的元素是完全合法的,因为两者都是Any的子类型(实际上,每种类型都是Any的子类型,因为Any是顶级类型)。

换句话说,第二个例子中的所有元素都是相同类型的。它们都是Any类型的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51115784

复制
相关文章
Springsecurity之jsp中url方式控制权限
    如List-2.1所示,单独定义个DefaultWebInvocationPrivilegeEvaluator的bean就可以了,将interceptor作为构造函数的参数传给它,Springsecurity会自动加载它,需要注意的是这个webInvocationFilter要放在security配置的最前面,不然会失效,至于为什么,现在还没弄清楚。
克虏伯
2019/04/15
6620
Springsecurity之jsp中url方式控制权限
Tomcat中JSP预编译处理Jasper 2 JSP Engine
The Apache Jakarta Tomcat 5.5 Servlet/JSP Container Jasper 2 JSP Engine How To
阿敏总司令
2019/02/28
2.6K0
jsp基本语法
JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。 JSP是一种Java servlet,主要用于实现Java web应用程序的用户界面部分。网页开发者们通过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操作和命令来编写JSP。 JSP通过网页表单获取用户输入数据、访问数据库及其他数据源,然后动态地创建网页。 JSP标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。
白胡杨同学
2020/04/10
1K0
JSP基本语法
  记录一下自己复习到的知识点,以后看起来也方便。   指令   JSP中三个指令,page,include,taglib page 用于定义页面相关的信息,比如下面的代码: <%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8"%>   language定义了页面的使用语言;   import引用页面中使用的工具类;   contentType定义页面的编码格式;   p
用户1154259
2018/01/17
1K0
JSP基本语法
JSP基本语法
JSP页面是指拓展名为.jsp的文件。 在一个JSP页面中,可以包括指令标识、HTML代码、JavaScript代码、嵌入的Java代码、注释和JSP动作标识等内容。但这些内容并不是一个JSP页面所必需的。下面将通过一个简单的JSP页面说明JSP页面的构成。
海盗船长
2020/08/27
9570
JavaWeb——JSP入门学习(JSP基本概念、JSP脚本、JSP内置对象)
本章内容只对JSP内容做入门介绍,是为了会话技术的Cookie和Session内容的承接,后续再写文章详细介绍JSP。
Winter_world
2020/09/25
14.9K0
JavaWeb——JSP入门学习(JSP基本概念、JSP脚本、JSP内置对象)
如何在 ASP.NET Core 中重写 URL
所谓URL重写指的是更改当前执行的URL,将其指向另外的URL以继续处理当前请求或重定向到外部URL。在ASP.NET中我们可以使用HttpContext.RewritePath方法,但在.NET Core中它并不存在。下面我我们将学习重写和重定向之间的区别,和何时以及如何在ASP.NET Core 中使用它们。 实际开发中,常见的重写URL场景有如下四种:
喵叔
2021/12/05
3.2K0
如何在Java中处理JSON
New 一个 ObjectMapper对象,后续将利用这个ObjectMapper对象来进行一系列的操作。
泰坦HW
2020/07/22
1.5K0
如何在代码中处理时间
在国际化应用中,对日期/时间的处理远比你想象中的更难,特别是当涉及到时区的时候。为什么会这么难?我们该如何解决它?请听我为你一一解析。几乎所有的系统都离不开“时间”的概念,以至于大多数语言(及其默认库)都定义了日期/时间等类型。但是,我们日常所说的“时间”这个词实际上包含了多个相似却有微妙差异的概念。如果不能分清它们,会给你的开发工作带来很多烦恼。
ThoughtWorks
2021/09/15
1.6K0
JSP的基本使用总结
JSP 页面本质上是一个 Servlet 程序,第一次访问 JSP 页面时 (运行 Tomcat 服务器后在浏览器地址栏输入路径),Tomcat 服务器会将此 JSP 页面翻译成为一个 Java 源文件,并对其进行编译成为.class 字节码文件 (一个.java,一个.class),当打开.java 文件时发现其中的内容是:
程序员Leo
2023/08/07
3790
JSP的基本使用总结
jsp中<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” 。。的重要性「建议收藏」
这个句头作用是很大的,如果不加,默认你的html是html4.0的。 而如果加上了<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
全栈程序员站长
2022/09/14
4.9K0
如何在Vuex中处理异步操作?
当组件中的fetchData方法被调用时,它会通过this.$store.dispatch触发名为fetchData的action。fetchData action中执行异步操作,例如发起API请求,然后在请求完成后通过mutations更新状态。
王小婷
2023/10/03
2690
如何在JavaScript中处理大量数据
在几年之前,开发人员不会去考虑在服务端之外处理大量的数据。现在这种观念已经改变了,很多Ajax程序需要在客户端和服务器端传输大量的数据。此外,更新DOM节点的处理在浏览器端来看也是一个很耗时的工作。而且,需要对这些信息进行分析处理的时候也很可能导致程序无响应,浏览器抛出错误。 将需要大量处理数据的过程分割成很多小段,然后通过JavaScript的计时器来分别执行,就可以防止浏览器假死。先看看怎么开始: function ProcessArray(data,handler,callback){ Process
CSDN技术头条
2018/02/09
3K0
2023-06-11:redis中,如何在100个亿URL中快速判断某URL是否存在?
2023-06-11:redis中,如何在100个亿URL中快速判断某URL是否存在?
福大大架构师每日一题
2023/06/21
2420
2023-06-11:redis中,如何在100个亿URL中快速判断某URL是否存在?
如何在 JavaScript 中处理 HTML 事件?
在Web开发中,JavaScript是一种常用的脚本语言,用于增强网页的交互性和动态性。HTML事件是用户与网页交互时发生的动作,如点击、鼠标移动、键盘输入等。本文将介绍如何在JavaScript中处理HTML事件,以实现更丰富的用户体验和交互功能。
海拥
2023/06/27
3230
如何在 JavaScript 中处理 HTML 事件?
PHP的URL处理
完整URL地址: http://username:password@hostname/path?arg=value#auchor 协议:http:// 用户名和密码: username:passw
Java架构师必看
2021/03/22
3.8K0
【Go 语言社区】GO中怎么处理URL编码?
package main import( "fmt" "net/url") func main(){ var URL = "%5B%7B%22ip%22%3A%22119.90.49.95%22%2C%22port%22%3A%228074%22%7D%2C%7B%22ip%22%3A%22119.90.49.110%22%2C%22port%22%3A%228050%22%7D%2C%7B%22ip%22%3A%22119.90.49.92%22%2C%22port%22%3A%
李海彬
2018/03/20
8200
点击加载更多

相似问题

样式表链接失败HTML/CSS

42

在css样式表中添加指向图像的链接

41

CSS样式表未链接到html

10

HTML/CSS:基础样式表不会链接

26

CSS样式表未链接到HTML

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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