热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ScalaStringtoInt-Int不接受参数

如何解决《ScalaStringtoInt-Int不接受参数》经验,为你挑选了1个好方法。

所以我正在学习Scala,我遇到了这个挑剔的问题......

如果我们有一个String并希望将其转换成一个Int,我在网上找到的所有例子都说:"这很简单!只需使用String.toInt!"

好的:

var x = readLine().toInt

很简单.我假设toInt是一个功能String.但如果是这样的话,我应该可以toInt用括号打电话,对吧?来自Java,这对我来说更自然:

var x = readLine().toInt()

可惜!Scala给了我以下错误:

[错误] /home/myhome/code/whatever/hello.scala:13:Int不带参数

[error] var x = readLine().toInt()

好奇.这个错误是什么意思?是toInt不是一个功能String?同样,为什么我可以两个都做:

var x = readLine().toLowerCase()
var y = readLine().toLowerCase

没有任何问题?

编辑:重复的问题不解决toLowerCasevs toInt问题.



1> Travis Brown..:

这是一个很好的问题,我不认为它是关于定义带或不带括号的零度方法的问题的重复.

这里toInt和之间的区别在于toLowerCasetoInt是标准库StringOps类提供的语法丰富.您可以使用reifyshowCode在REPL中检查:

scala> import scala.reflect.runtime.universe.{ reify, showCode }
import scala.reflect.runtime.universe.{reify, showCode}

scala> showCode(reify("1".toInt).tree)
res0: String = Predef.augmentString("1").toInt

这只是去除了浓缩方法调用,并向您显示已应用隐式转换来支持它.

如果我们查看toInt方法StringOps,我们会看到它的定义没有括号.正如可能重复问题的答案所指出的那样,如果Scala中的零arity方法定义为没有括号,则不能用括号调用它(尽管如果它用括号定义,它可以以任一方式调用).

所以这就是为什么"1".toInt()不起作用.如果String是遵循正常Scala命名约定的普通Scala类,"ABC".toLowerCase()也不会工作,因为该方法将被定义为没有括号,因为它不是副作用(这只是一个约定,但它往往在Scala中非常一致地应用)码).

问题是,String它实际上并不是Scala标准库中的一个类 - 它只是java.lang.String.在JVM级别,使用括号定义的零arity方法和没有括号定义的零arity方法之间没有区别 - 这纯粹是Scala的区别,并且它不是在JVM方法签名中编码,而是在一个单独的一批元数据中存储在类文件.

Scala语言设计者决定将所有未在Scala中定义的零方法(因此没有这些额外的元数据)视为用括号定义.由于toLowerCase方法on String真的是一个java.lang.String类的方法(不是类似的语法丰富方法toInt),它属于这个类,这意味着你可以用任何一种方式调用它.


我会稍微谈谈Travis如何解释"副作用",因为它非常重要,对于来自Java背景的人来说,它可能并不那么明显.如果函数以任何方式执行某些影响函数体外"世界状态"的操作,则函数是副作用的.这并不意味着它必须改变一些价值观; 足以让它的效果可观察到(例如印刷到控制台,正如Travis所说).这是不好的.函数的另一个坏处是保持一些可变状态,这可能导致为相同的输入参数返回不同的结果.
如果一个函数没有副作用,只取决于它的参数并且总是为相同的参数返回相同的结果,我们称这样的函数为"纯".对于零参数函数,我们失去了仅依赖于其参数并且对于相同参数总是返回相同结果的条件(因为没有参数)所以我们所有可能"搞乱"的是具有副作用.如果我们没有(没有打印,没有记录,没有任何请求,没有数据库写入等),那么它是一个安全的,幂等函数 - 一个简单的getter,如果你愿意的话 - 按照惯例,它应该没有括号.
推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 如何搭建Java开发环境并开发WinCE项目
    本文介绍了如何搭建Java开发环境并开发WinCE项目,包括搭建开发环境的步骤和获取SDK的几种方式。同时还解答了一些关于WinCE开发的常见问题。通过阅读本文,您将了解如何使用Java进行嵌入式开发,并能够顺利开发WinCE应用程序。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
author-avatar
zhaobo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有