В kotlin 1.2 нет класса kotlin.Math, как сказано в документации

В последнее время я много имел дело с мультиплатформенным kotlin, и я полностью понимаю природу разработки. Изначально у меня был собственный ожидаемый класс Math (в общем модуле), и у меня были реальные классы в среде JS и JVM.

Поскольку мне нравится читать документацию, я обнаружил, что библиотека Math была добавлена ​​в стандартную библиотеку начиная с kotlin 1.2. это беспокоит меня, поскольку я использую kotlin 1.2.51, и я получаю сообщение об ошибке при попытке доступа к классу из kotlin.Math в моем общем модуле и в любом из модулей моей платформы.

Что я не понимаю? Как мне получить доступ к классу kotlin.Math в моем общем модуле?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
3 512
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Импортируйте это так: import kotlin.math.*

Есть ли проблема, о которой я должен знать?

user8959091 26.07.2018 09:24

как, черт возьми, я могу его импортировать, если его там нет?

andylamax 28.07.2018 07:05

это не математика. это kotlin.math. Если вы используете Kotlin 1.2.51 это там

user8959091 28.07.2018 07:08

доступны в общих модулях kotlin? если да, то, вероятно, что-то не так с моим stdlib kotlin

andylamax 28.07.2018 07:48

какой ide ты используешь?

user8959091 28.07.2018 07:49

intelliJ idea 2017.3.2 (Ultimate Edition)

andylamax 28.07.2018 08:50

В вашем идеале напишите такую ​​строчку: val a = sqrt(10.0). Если ide не предлагает импортировать kotlin.math.sqrt, вам необходимо обновление.

user8959091 28.07.2018 08:55

он также хорошо работает в среде kotlin / js как val a = js ("Math"). sqrt (10.0)

andylamax 28.07.2018 09:06

Это так просто.

user8959091 28.07.2018 09:08

Класс Math является устаревшим, и сообщение об устаревании содержит:

Use top-level functions from kotlin.math package instead.

(см. также https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.js/-math/index.html)

Так что почему-то ответ @mTak правильный, хотя об этом не упоминалось, что вы должны использовать kotlin.math.*-import вместо вашего Math-класса.

В качестве альтернативы вы также можете импортировать kotlin.math.max и т. д. В зависимости от того, какая функция вам действительно нужна.

Тем больше я думаю об этом: я не знаю, был ли когда-либо класс Math в jvm-варианте Kotlin (ничего не нашел относительно этого), поэтому в многоплатформенном проекте доступ к классу Math, вероятно, должен всегда терпели неудачу.

что ты имеешь ввиду это не было упомянуто?

user8959091 26.07.2018 10:00

Вы написали: «Импортируйте это так: import kotlin.math.*, но там нет класса Math. В нем отсутствует информация о том, что класс Math лучше заменить на методы доступа непосредственно в kotlin.math, которые доступны как для JS, так и для JVM. .

Roland 26.07.2018 10:06

Вы правы относительно всей дополнительной информации, но, поскольку математического класса нет, я предложил единственную альтернативу, которая существует

user8959091 26.07.2018 10:10

Это нормально (я не голосовал против). Но вы знаете, что там нет Math-класса. ОП может не знать. Вы можете добавить эту информацию, иначе ваш "импортировать Это" может быть неправильно истолкован как: ваш класс находится в этом пакете.

Roland 26.07.2018 10:13

В любом случае, я не думаю, что это будет неправильно истолковано, так как это то, что предлагает Котлин.

user8959091 26.07.2018 10:21

во-первых, я не могу импортировать, поскольку нет класса Math или kotlin.math, как предлагает @Roland в общем модуле

andylamax 28.07.2018 06:59

второй. bsed на [kotlinlang.org/docs/reference/whatsnew12.html], в документации сказано, что они добавили kotlin.math, начиная с kotlin 1.2. Изначально этого не было в общем модуле, поэтому у меня был собственный математический класс.

andylamax 28.07.2018 07:03

В стандартной библиотеке Kotlin математические функции предоставляются как функции верхнего уровня в пакете kotlin.math.

Поэтому вам нужно импортировать этот пакет, и тогда вы сможете использовать из него функции, такие как sin, sqrt и так далее.

import kotlin.math.*

val sqrt2 = sqrt(2.0)

Вы также можете импортировать функции по одной, например import kotlin.math.sqrt или даже называть их полностью квалифицированными val result = kotlin.math.sqrt(2.0)

kotlin.math недоступен в общем модуле

andylamax 28.07.2018 07:04

Так должно быть. Проверьте зависимость от библиотеки kotlin-stdlib-common. Если он там, а вы по-прежнему не видите kotlin.math, сообщите о проблеме здесь: kotl.in/issue

Ilya 29.07.2018 16:30

@andylamax Сообщалось ли вам о каких-либо ошибках, если вы пишете приведенный выше пример кода в своем общем модуле?

Ilya 30.07.2018 01:40
Ответ принят как подходящий

Через некоторое время (даже чувствую себя глупо). Я обнаружил, что библиотека kotlin.math в общих модулях kotlin уже добавлена. Единственная разница заключалась в том, что в нем не было «Математики». предшественник, как я обычно привык.

Итак,
Math.round (x: Float) был просто round (x: Float)
Math.sin (x: Float) был просто грехом (x: Float)

Другие вопросы по теме