Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Книга Хорстманна "Scala для нетерпеливых" (http://www.tehnari.ru/f41/t99587/)

mihailvt 18.11.2014 17:01

Книга Хорстманна "Scala для нетерпеливых"
 
Почему, если вызвать
sqrt
при
import scala.math._
то вызов сработает? Ведь класс метода всё-таки не указан.

При этом на метод probablePrime класса BigInt ругается, даже если напрямую указать
import scala.math.BigInt

Притом автор в упражнениях требует в первой же главе, чтобы добились выполнения probablePrime без префикса.

Gruvi 18.11.2014 18:56

BigInt подразумевает целые числа. А после выполнения корня, может получится и дробное.

mihailvt 18.11.2014 21:57

Это два разных вопроса.
1. Когда я делаю import scala.math._ то вызов sqrt работает. То есть, методы соответствующего класса вызываются. В принципе, так, наверное, должно быть, хотя с точки зрения Явы необычно.
2. Хорстманн дал задание сделать такой импорт, чтобы
probablePrime( 100, Random )
работала бы без префиксов.
Для рандома делается хорошо, можно написать
import scala.util.Random
и всё хорошо. Для probablePrime не получается ни в какую, ни через импорт всего пакета math, ни через импорт конкретного класса. Что особенно странно на фоне выполнения sqrt как из пушки. Может быть, можете подсказать, что нужно сделать, чтобы выполнить задание Хорстманна ?

Gruvi 18.11.2014 22:32

def isProbablePrime(certainty: Int): Boolean
Возвращает true, если этот BigInt, вероятно, главный. ложный, если это - определенно составной объект.

Это мера неопределенности, которую вызывающая сторона готова терпеть: если вызов возвращает true вероятность, что этот BigInt главный, превышает (1 - 1/2 ^ уверенность). Время выполнения этого метода пропорционально значению этого параметра.

А вообще для скалы, есть хороший сайт Scala Standard Library API (Scaladoc) 2.10.3

Слева сверху в поиске вводишь команду и она пишет тебе что за команда,тип, и т.п. и т.д.

mihailvt 19.11.2014 00:00

Совершенно верно. Именно там, введя BigInt, я вижу его в пакете scala.math и вижу у объекта функцию
def probablePrime(bitLength: Int, rnd: Random): BigInt
которую никак не могу вызвать без префикса, как того хочет Хортсманн.

mihailvt 19.11.2014 15:52

По поводу sqrt вопрос снимается: в Скале есть функции пакетов. Я принимался как-то раньше за Скалу и успел забыть :(

А вот с probablePrime по-прежнему непонятно

mihailvt 08.12.2014 15:02

С probablePrime всё понятно. В Скале есть импорт членов классов. Чтобы избежать наименования класса, надо импортировать не класс, а его члены, т.е. импортировать BigInt._


Часовой пояс GMT +4, время: 16:00.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.