Pattern matching around type erasure

You may have encountered this warning: "scala non-variable type argument in type pattern is unchecked since it is eliminated by erasure". If you google for it, you quickly find several decent Stack Overflow and forum replies that will suggest you to structure your code differently or use Type Manifests. They may even mention that there is an option to write custom extractor, but most of the time without transparent code sample. I decided to write this post to give such an easy-to-grasp code snippet.

Let's prepare the scene. Assume we have some generic class, which actual instance type will be erased.

class Container[T](data: T) {
  def get = data
}
// Let's simulate type erasure, otherwise Scala compiler will
// figure out the type. It is really that smart :)
def stored: Container[_] = new Container("hello")

Next, our straightforward pattern match may work in some cases, but will generate a warning and will not be able to distinguish for the type of the generic:

stored match {
  case c: Container[String] => println(c.get)
  // The second condition will never be executed
  case c: Container[Int] => println("Int " + c.get)
}

But it is very easy to create an extractor object:

object Container {
  def unapply[T](x: Container[T]) = Some(x.get)
}

Now you can use it hassle-free:

stored match {
  case Container(data: String) => println(data)
  case Container(data: Int) => println("Int " + data)
}

But what if you want to match on a type of generic, but still have the entire container object, not its content? That is simple as well:

stored match {
  // "x" will be the entire container
  case x @ Container(_: String) => println(x)
  case x @ Container(_: Int) => println("Int " + x)
}

This functionality is well documented and is safe to be used.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
### 回答1: 该错误提示表示在SSH连接时没有找到匹配的主机密钥类型。这可能是由于SSH客户端和服务器之间的协议不匹配或服务器上没有正确配置主机密钥所致。建议检查SSH客户端和服务器之间的协议版本,并确保服务器上正确配置了主机密钥。 ### 回答2: "No matching host key type found" 是一个常见的 SSH 错误消息,意味着客户端和服务器之间无法找到匹配的主机密钥类型。 SSH (Secure Shell) 是一种加密协议,用于在网络中安全地传输数据和管理远程服务器。每台 SSH 服务器都有一个主机密钥,用于验证服务器身份和加密通信。当客户端(例如电脑或终端)尝试连接到 SSH 服务器时,会检查服务器的主机密钥以确保安全通信。 出现"No matching host key type found"错误的原因可能是客户端和服务器之间的 SSH 配置不兼容,导致无法找到匹配的主机密钥类型。这可能是由于以下原因引起的: 1. 客户端和服务器使用的 SSH 版本不兼容。 2. 客户端和服务器配置中存在不受支持的主机密钥类型。 3. 客户端和服务器之间存在网络连接问题,导致密钥交换失败。 要解决这个问题,可以尝试以下方法: 1. 确保客户端和服务器使用相同版本的 SSH 协议。如果有可能,尽量升级到最新版本的 SSH。 2. 检查客户端和服务器的 SSH 配置文件,确保正确配置支持的主机密钥类型。可以尝试使用更常见的密钥类型,例如 RSA 或 DSA。 3. 检查网络连接是否正常,确保客户端可以与服务器建立可靠的连接。可以尝试通过其他网络连接或重新启动网络设备来解决连接问题。 总之,"No matching host key type found" 错误表示客户端无法找到合适的主机密钥类型与服务器进行身份验证和加密通信。通过检查 SSH 配置、升级 SSH 版本以及确保网络连接正常,通常可以解决这个问题。 ### 回答3: "No matching host key type found" 是一个SSH连接错误信息,表示SSH客户端无法找到与主机密钥类型匹配的密钥。 当用户尝试使用SSH客户端连接到远程主机时,通常需要验证主机的身份。这个验证过程基于主机的密钥。然而,如果客户端无法找到与远程主机提供的密钥类型匹配的密钥,就会出现"No matching host key type found"错误。 这个错误通常出现在以下几种情况下: 1. 客户端和远程主机之间的SSH版本不兼容。在远程主机上使用的密钥类型可能是较新的,而客户端的SSH版本不支持这种密钥类型。 解决方法:更新客户端SSH软件到最新版本,以支持更多类型的密钥。 2. 主机密钥和客户端预期的密钥类型不匹配。客户端可能预期使用某种特定类型的密钥进行验证,但远程主机提供的密钥类型与之不匹配。 解决方法:通过检查远程主机的SSH配置文件,确认主机是否提供了预期类型的密钥。如果不匹配,可以尝试使用其他类型的密钥重新连接。 3. 客户端配置的密钥类型限制。有时,客户端的SSH配置文件可能限制了可接受的密钥类型,导致无法找到与远程主机提供的密钥类型匹配的密钥。 解决方法:检查客户端的SSH配置文件,查看是否限制了可接受的密钥类型。如果限制存在,可以考虑更新配置以接受更多类型的密钥。 总之,当出现"No matching host key type found"错误时,我们需要检查SSH客户端的版本、远程主机提供的密钥类型以及客户端的配置,以解决连接问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值