当给定这个模式与整数值匹配时,为什么 scala 会抱怨?

2024-04-04

Goal:编写一个函数,生成一个排除指定字符(由索引标识)的新字符串

Example:

  • takeAllExcept(0, "abc")回报bc
  • takeAllExcept(1, "abc")回报ac
  • takeAllExcept(2, "abc")回报ab

我最初做了什么:

def takeAllExcept( index: Int, s: String ): String = {
  val lastIndex = s.length()-1
  index match {
    case 0 => return s.slice(1, s.length)
    case lastIndex => return s.slice(0, s.length()-1)
    case _ => { s.slice(0, index) + s.slice(index+1, s.length) }
  }
}

编译器抱怨语句块 forcase _无法到达。

我是如何修复它的

def takeAllExcept( index: Int, s: String ): String = {
  val lastIndex = s.length()-1
  if( index == 0 )
    return s.slice(1, s.length)

  if( index == lastIndex )
    return s.slice(0, s.length()-1)

  s.slice(0, index) + s.slice(index+1, s.length)
}

我想知道为什么我的最初尝试因无法访问的代码而失败。对我来说这看起来是合法的。另外,scala 中是否有内置的工具已经可以做到这一点?


lastIndex模式中是一个新名称的隐式声明,该名称绑定到放入匹配中的任何值,并隐藏已定义的所有值lastIndex,正如其他两篇文章已经指出的那样。除了使用大写标识符之外,还有其他两种可能性(请参阅 Peter 的帖子):

使用反引号让编译器知道这不应是新标识符的声明:

case `lastIndex` => ...

使用模式保护:

case x if x == lastIndex => ...

如果您想对字符串进行大量基于索引的删除,那么通过调用使用 Buffer 会更快toBuffer在字符串上,然后你可以使用remove(i: Int)缓冲区的方法。仅对于一项操作来说速度较慢,因为完成后您必须将缓冲区转换回字符串,但如果您执行许多随机访问操作,则速度会快得多。完成后您可以致电mkString在缓冲区上取回你的字符串。对于单个删除,我会按照彼得的建议进行操作,或者这里有一个替代方案:

def takeAllExcept(i: Int, s: String) = s.take(i) + s.drop(i+1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当给定这个模式与整数值匹配时,为什么 scala 会抱怨? 的相关文章

随机推荐

  • 如何从 .rst 文件访问 sphinx conf.py 中的变量?

    我是 Sphinx 和 reStructuredText 的新手 在我的狮身人面像里面conf py我定义 version 0 0 2 代替tutorial rst我想访问version变量和显示0 0 2在我的 html 文件中 我试过
  • sbt 中单个冒号的含义是什么(两个命令之间)

    在使用 sbt 的 travis yml 文件中 我看到了这个 script sbt TRAVIS SCALA VERSION test fastOptJS test fullOptJS 在 sbt 中 我可以运行test 我可以跑fast
  • Drupal Ubercart:多币种?

    将多货币支持集成到 Ubercart 的最安全方法是什么 我找到了这个模块 http drupal org project multicurrency http drupal org project multicurrency但它仍在开发中
  • 使用 iText 从 *.ttf 文件创建字体

    这是我的 Resources class 中的一个方法 public static Font loadFont String fontFileName BaseFont base null try base BaseFont createF
  • XStream 和下划线

    看起来 XStream com thoughtworks xstream gt xstream 1 4 2 正在以一种非常奇怪的方式处理元素和属性名称中的下划线 我需要从客户那里获取并解析其属性中包含下划线的 xml 这是我第一次尝试 XS
  • 使用 Rails 设计首次登录

    如何在自定义会话控制器上确定用户是第一次登录 我希望能够创建会话并重定向到welcome index如果是第一次 否则它将被重定向到root url 我的代码如下 class MysessionsController lt Devise S
  • Java Logger:无法在 logger.properties 文件中设置日志级别

    我有一个使用maven 构建的java 项目 我在用java util logging Logger在我的项目中并想使用logger properties文件 不是命令行 我创建了一个logger properties像这样的文件 hand
  • 如果没有观察到状态,虚拟 DOM 实现与 createDocumentFragment() 有何不同?

    虚拟 DOM 是 DOM 的轻量级副本 在将其插入实际 DOM 之前在本地进行维护 缓存 我们可以根据需要更改它 然后保存到我们真实的 DOM 树中 它使用高效的 diff 算法来来回更新更改和其他用例 这一切都是为了避免直接操作 DOM
  • 使用 API Gateway 处理 AWS Lambda 函数中的错误

    每次我遇到语法错误或者我只想在 AWS Lambda 函数中发送自定义错误时 我都会收到相同的 502 Bad Gateway 响应 内部服务器错误 我尝试了这个简单的代码 module exports saveImage event co
  • 引发了“System.OutOfMemoryException”类型的异常。为什么?

    我有一个动态查询 返回大约 590 000 条记录 第一次运行成功 但再次运行时 我不断收到System OutOfMemoryException 发生这种情况的原因有哪些 错误发生在这里 public static DataSet Get
  • 让 tesseract 只识别数字

    我正在尝试改进我制作的 OCR 程序来读取我正在使用的某个图像的布局 现在 我希望我的 OCR 程序只能识别数字 0 9 我尝试遵循问题的解决方案 限制 tesseract 正在寻找的字符 https stackoverflow com q
  • 更新Cesium回调属性导致实体闪烁

    这是一些可以粘贴到铯沙堡中的代码 它将一个实体添加到地图中 然后每秒更新位置属性的 CallbackProperty 每次更新时实体都会闪烁 var viewer new Cesium Viewer cesiumContainer var
  • 如何使用 Swift 从 URL 获取 HTML 源代码

    我需要查看某个 URL 给出的页面的 HTML 如果我有这个 使用 Swift 获取该 URL 的 HTML 源的最有效和同步的方法是什么 我无法在网上找到一种简洁的方法将其返回到变量中 而不是将其打印在completionHandler
  • React Native,更改 React Navigation 标题样式

    我正在实施反应导航 https reactnavigation org在我的 React Native 应用程序中 我想更改标题的背景和前景色 我有以下内容 Sample React Native App https github com
  • 终结者:如何在拆分窗格中打开选项卡

    每当我尝试创建新选项卡时 它总是在窗口级别打开 我想要实现的是在我正在使用的当前活动拆分窗格中打开一个选项卡 可以这样做吗 我在过去的三四年里一直在使用终结者 但我还没有看到你所要求的可能 话虽这么说 您可以在此处提交功能请求 https
  • Magento - 公共产品页面中的 404 错误

    我有一个 Magento 1 7 网页宽度 2 个不同语言的商店 每个商店的宽度不同 当我为第二个商店启用产品时 第二个商店的公共产品页面停止运行 现在出现了 404 错误 但第一家商店的产品页面仍然表现良好 所有其他页面均正常工作 htt
  • 无法从命令行运行 swing

    我使用Windows中的命令行来编译然后执行我的java程序 我去了http java sun com docs books tutorial uiswing start compile html http java sun com doc
  • 对所有当前播放的视频执行一个 AVPlayer 的 AVPlayerItemDidPlayToEndTime 操作

    问题 在有播放器的集合视图单元格中 如果我同时播放两个视频并寻找第一个视频结束然后AVPlayerItemDidPlayToEndTime发射了两次并且两个视频都重新启动 在集合视图单元格中我有 override func awakeFro
  • SQL 到 outfile - 文件存储在哪里? (MySQL、Windows)

    我正在使用 MySQL 并希望将以下查询的结果存储在我的计算机本地的 csv 文件中 SELECT INTO OUTFILE mysqlresults csv FIELDS TERMINATED BY OPTIONALLY ENCLOSED
  • 当给定这个模式与整数值匹配时,为什么 scala 会抱怨?

    Goal 编写一个函数 生成一个排除指定字符 由索引标识 的新字符串 Example takeAllExcept 0 abc 回报bc takeAllExcept 1 abc 回报ac takeAllExcept 2 abc 回报ab 我最