Scala中的apply/get方法
如果我们按照“Scala编程”一书中的定义: 将一个或多个值周围的括号应用于 变量,Scala将代码转换为方法调用 命名为apply的变量 那么访问数组的元素呢?例如:Scala中的apply/get方法,scala,apply,Scala,Apply,如果我们按照“Scala编程”一书中的定义: 将一个或多个值周围的括号应用于 变量,Scala将代码转换为方法调用 命名为apply的变量 那么访问数组的元素呢?例如:x(0)被转换为x.apply(0)?(假设x是一个数组)。我试着执行上面这一行。这是投掷错误。我还尝试了x.get(0),它也抛出了错误 有人能帮忙吗?如果你给一个对象添加了一个应用方法,你可以应用这个对象(就像你可以应用函数一样) 实现这一点的方法是将对象当作函数来应用,直接使用(),而不使用“点” 如果向对象添加应用方法,则
x(0)
被转换为x.apply(0)
?(假设x
是一个数组)。我试着执行上面这一行。这是投掷错误。我还尝试了x.get(0),它也抛出了错误
有人能帮忙吗?如果你给一个对象添加了一个应用方法,你可以应用这个对象(就像你可以应用函数一样) 实现这一点的方法是将对象当作函数来应用,直接使用(),而不使用“点”
如果向对象添加应用方法,则可以应用该对象(就像应用函数一样) 实现这一点的方法是将对象当作函数来应用,直接使用(),而不使用“点”
()
意味着apply()
数组示例
scala> val data = Array(1, 1, 2, 3, 5, 8)
data: Array[Int] = Array(1, 1, 2, 3, 5, 8)
scala> data.apply(0)
res0: Int = 1
scala> data(0)
res1: Int = 1
未发布,但另一种选择是使用更安全的方法,即lift
**注:*scala.Array
可以进行变异
scala> data(0) = 100
scala> data
res7: Array[Int] = Array(100, 1, 2, 3, 5, 8)
在这种情况下,您不能使用apply
,请将apply视为getter而不是mutator
scala> data.apply(0) = 100
<console>:13: error: missing argument list for method apply in class Array
Unapplied methods are only converted to functions when a function type is expected.
You can make this conversion explicit by writing `apply _` or `apply(_)` instead of `apply`.
data.apply(0) = 100
^
用户定义的应用方法,
scala> object Test {
|
| case class User(name: String, password: String)
|
| object User {
| def apply(): User = User("updupd", "password")
| }
|
| }
defined object Test
scala> Test.User()
res2: Test.User = User(updupd,password)
()
意味着apply()
数组示例
scala> val data = Array(1, 1, 2, 3, 5, 8)
data: Array[Int] = Array(1, 1, 2, 3, 5, 8)
scala> data.apply(0)
res0: Int = 1
scala> data(0)
res1: Int = 1
未发布,但另一种选择是使用更安全的方法,即lift
**注:*scala.Array
可以进行变异
scala> data(0) = 100
scala> data
res7: Array[Int] = Array(100, 1, 2, 3, 5, 8)
在这种情况下,您不能使用apply
,请将apply视为getter而不是mutator
scala> data.apply(0) = 100
<console>:13: error: missing argument list for method apply in class Array
Unapplied methods are only converted to functions when a function type is expected.
You can make this conversion explicit by writing `apply _` or `apply(_)` instead of `apply`.
data.apply(0) = 100
^
用户定义的应用方法,
scala> object Test {
|
| case class User(name: String, password: String)
|
| object User {
| def apply(): User = User("updupd", "password")
| }
|
| }
defined object Test
scala> Test.User()
res2: Test.User = User(updupd,password)
为了
正如你在评论中提到的,答案是不同的。它也会被转换为方法调用,但不会被转换为apply
;而是
x.update(1, 200)
就像apply
,这将适用于定义合适的update
方法的任何类型
正如你在评论中提到的,答案是不同的。它也会被转换为方法调用,但不会被转换为apply
;而是
x.update(1, 200)
就像
apply
,这将适用于定义合适的update
方法的任何类型。您会遇到什么错误?编译或运行时错误?如果你只做x(0),它能工作吗?x、 apply(0)是访问数组的正确方法,尽管通常您会使用x(0)语法而不是显式写出apply。x(0)
与x.apply(0)
相同,并且应该在数组上工作。你犯了什么错误Array
没有get()
方法。地图和选项有get()
方法。对不起,我想问如下问题。。我正在运行我的程序,如下所示。。scala>val x=Array(1,2,3)x:Array[Int]=Array(1,2,3)scala>x(1)=200 scala>x.apply(1)=200:13:错误:类数组中缺少方法apply的参数列表未应用的方法仅在需要函数类型时转换为函数。您可以通过编写apply
或apply(
而不是apply
来明确此转换。x、 应用(1)=200^以上,当我用x.apply()替换x(1)时,它抛出错误。我无法编辑注释部分的代码。“它抛出了错误”不是一个足够精确的错误描述,我们无法帮助您。什么不起作用?它怎么不起作用?你的代码有什么问题?你收到错误信息了吗?错误消息是什么?你得到的结果不是你期望的结果吗?你期望得到什么样的结果?为什么?你会得到什么样的结果?两者有什么不同?你观察到的行为是否不是期望的行为?期望的行为是什么?为什么?观察到的行为是什么?它们以什么方式不同?你得到了什么错误?编译或运行时错误?如果你只做x(0),它能工作吗?x、 apply(0)是访问数组的正确方法,尽管通常您会使用x(0)语法而不是显式写出apply。x(0)
与x.apply(0)
相同,并且应该在数组上工作。你犯了什么错误Array
没有get()
方法。地图和选项有get()
方法。对不起,我想问如下问题。。我正在运行我的程序,如下所示。。scala>val x=Array(1,2,3)x:Array[Int]=Array(1,2,3)scala>x(1)=200 scala>x.apply(1)=200:13:错误:类数组中缺少方法apply的参数列表未应用的方法仅在需要函数类型时转换为函数。您可以通过编写apply
或apply(
而不是apply
来明确此转换。x、 应用(1)=200^以上,当我用x.apply()替换x(1)时,它抛出错误。我无法编辑注释部分的代码。“它抛出了错误”不是一个足够精确的错误描述,我们无法帮助您。什么不起作用?它怎么不起作用?你的代码有什么问题?你收到错误信息了吗?错误消息是什么?你得到的结果不是你期望的结果吗?你期望得到什么样的结果?为什么?你会得到什么样的结果?两者有什么不同?你观察到的行为是否不是期望的行为?期望的行为是什么?为什么?观察到的行为是什么?它们有什么不同?