- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
package test.sandbox
object Main {
def foo(implicit a: Int): Int = a * 2
def main(args: Array[String]): Unit = {
{
import Test._
val result = foo
println(s"Result1 = $result") // Result1 = 42
}
{
implicit val x = 16
println(s"Result2 = $foo") // Result2 = 32
}
}
}
object Test {
implicit val x: Int = 21
}
Пётр Сорокин? Пьер Суше? Прохор Старовер?
И Полиночка тоже сахарная, но не ``Scala'', а няшка! UwU
Реально по каким правилам оно выводит? Почему аргумент называется «а» (implicit a: Int), а вяжет оно с «x»?
Ну да, чтобы программу невозможно было прочитать и разобраться — самое оно.
Чтобы она компилировалось вечность — наилучший вариант.
Других переменных рядом не оказалось.
По маркеру implicit на этой переменной, вестимо. Походу можно одну из переменных в скопе так пометить и она будет юзаться для функций с implicit аргументом. Пиздецовая фича, конечно.
А там походу и тип может неявно конвертироваться?
implicit переменная может превращаться implicit функцией в какую-то подходящую для foo хрюкню.
Нужно больше ёбаной магии!
З.Ы. Откуда я знаю, я же не скалолазка, выше просто моя гипотеза написана.
https://www.geeksforgeeks.org/implicit-conversions-in-scala/
Ну и чем это лучше йажасцрипта?
Там хоть эти дибильные правила забиты на уровне стандарта.
А тут ещё и динамически меняются в зависимости от импорта разной хрюкни.
Зато на SO нашёлся забавный говнопример, как можно легко и просто обосраться при рефакторинге или импорте:
После этой срани даже C++ выглядит просто и понятно.