这是一个错误:
class Apple(weightInGrams: Float){
fun grow() {
weightInGrams+= 2.0f
}
}
答案 0 :(得分:4)
首先,相当于void
(在Java中)是Unit
(在Kotlin中),并且函数返回的类型在最后,所以你应该使用fun grow(): Unit { ... }
而不是fun void grow() { ... }
。此外,您可以省略Unit
并只编写fun grow() { ... }
,因为编译器知道您的函数没有返回任何有意义的值。
现在,我将尝试解释基本知识以回答您的问题并给您一些清晰度。在Java中,构造函数的参数仅在该构造函数中可见。在Kotlin中,参数仅在初始化程序块和属性初始化程序中可见,除非您将它们转换为属性。让我们用例子来解释这一切。
在Java中,我们多次看到这样的类中的构造函数:
public class Person {
public final String name;
public final Integer age;
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
}
参数用于初始化类Person
的字段。
在Kotlin,相当于:
a)使用初始化程序块中的参数。
class Person(name: String, age: Int) {
val name: String
val age: Int
init {
this.name = name
this.age = age
}
}
b)使用在类体中声明的属性初始值设定项中的参数。
class Person(name: String, age: Int) {
val name = name
val age = age
}
c)声明属性并直接在主构造函数中初始化它们。
class Person(val name: String, val age: Int)
因此,如果您编写var
或val
,构造函数的参数也将属性,您可以在类中使用它们,就像您希望在函数内部grow
class Apple(var weightInGrams: Float) {
fun grow() {
weightInGrams += 2.0f
}
}
或var
一样。 1}}。
所以,你的最终代码应该是:
weightInGrams
foreach($request->customers as $id){ //Loop 1
$product
->customers()->sync([$id=>['status'=>1]],false);
//$product->save();
}
foreach($product->customers()->get() as $cust){ //Loop2
if (!in_array($cust->id,$request->customers)){
$product
->customers()->sync([$cust->id =>['status'=>0]],false);
}
}
/* Not needed
$product //Create new record if found
->customers()
->sync($request->customers,false);
*/
因为您要多次为{!! Form::open(['route' => ['route.name', $user->id]]) !!}
分配一个值。
答案 1 :(得分:0)
使您的财产成为集体成员
class Apple(var weightInGrams: Float){
fun void grow() {
weightInGrams+= 2.0f
}
}
答案 2 :(得分:0)
我知道这个问题已经回答了。
如果要使用initialWeight初始化苹果,可以按照以下方式执行。 init
块可以帮助初始化值,grow函数可以有效地处理实际变量,而无需将构造函数变量声明为var
:
class Apple(initWeight: Float){
var weightInGrams = 0.0f
init {
var weightInGrams = initWeight
}
fun grow() {
weightInGrams+= 2.0f
}
}
fun main(args: Array<String>) {
val a = Apple(10.0f)
a.grow()
println(a.weightInGrams)
};