Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala中的apply/get方法_Scala_Apply - Fatal编程技术网

Scala中的apply/get方法

Scala中的apply/get方法,scala,apply,Scala,Apply,如果我们按照“Scala编程”一书中的定义: 将一个或多个值周围的括号应用于 变量,Scala将代码转换为方法调用 命名为apply的变量 那么访问数组的元素呢?例如:x(0)被转换为x.apply(0)?(假设x是一个数组)。我试着执行上面这一行。这是投掷错误。我还尝试了x.get(0),它也抛出了错误 有人能帮忙吗?如果你给一个对象添加了一个应用方法,你可以应用这个对象(就像你可以应用函数一样) 实现这一点的方法是将对象当作函数来应用,直接使用(),而不使用“点” 如果向对象添加应用方法,则

如果我们按照“Scala编程”一书中的定义:

将一个或多个值周围的括号应用于 变量,Scala将代码转换为方法调用 命名为apply的变量

那么访问数组的元素呢?例如:
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)时,它抛出错误。我无法编辑注释部分的代码。“它抛出了错误”不是一个足够精确的错误描述,我们无法帮助您。什么不起作用?它怎么不起作用?你的代码有什么问题?你收到错误信息了吗?错误消息是什么?你得到的结果不是你期望的结果吗?你期望得到什么样的结果?为什么?你会得到什么样的结果?两者有什么不同?你观察到的行为是否不是期望的行为?期望的行为是什么?为什么?观察到的行为是什么?它们有什么不同?