вы также можете использовать awk, поскольку он имеет возможность находить фиксированную строку, а также возможности программирования, например только
awk '{for(i=1;i<=NF;i++) if($i == "mystring") {print "do data manipulation here"} }' file
При необходимости в функции или свойстве, которое будет связано с классом, а не с экземплярами его, можно объявить это в сопутствующем объекте:
class Car(val horsepowers: Int) {
companion object Factory {
val cars = mutableListOf<Car>()
fun makeCar(horsepowers: Int): Car {
val car = Car(horsepowers)
cars.add(car)
return car
}
}
}
сопутствующий объект является одиночным элементом, и к его участникам можно получить доступ непосредственно через название содержания класса
val car = Car.makeCar(150)
println(Car.Factory.cars.size)
kotlin поставщик документов три способа сделать это, первое, определяют функцию в пакете, без класса:
package com.example
fun f() = 1
вторым является использование @JvmStatic аннотация:
package com.example
class A{
@JvmStatic
fun f() = 1
}
и третье сопутствующий объект использования:
package com.example
clss A{
companion object{
fun f() = 1
}
}
Нет никакого статического ключевого слова в kotlin. kotlin, документы рекомендует использовать функции уровня пакета, если Вы хотите следовать за DRY. Создайте файл с расширение .kt и поместите свой метод в него.
package p
fun m(){
//fun body
}
после компиляции m будет иметь подпись общедоступный статический финал пусто
и
import p.m
вє
Для Android с помощью строки от единственного действия до всего необходимого действия. Точно так же, как помехи в java
public final static String TEA_NAME = "TEA_NAME";
Эквивалентный подход в Kotlin:
class MainActivity : AppCompatActivity() {
companion object {
const val TEA_NAME = "TEA_NAME"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
Другое действие, где значение необходимо:
val teaName = MainActivity.TEA_NAME