-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Homework #3 #1
base: main
Are you sure you want to change the base?
Homework #3 #1
Conversation
* Реализовать метод printIfAny, который будет печатать значение, если оно есть | ||
*/ | ||
|
||
def printIfAny: Unit = this match { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
второй кейс лучше указать, иначе получите match error в рантайме, что в случае с Option не очень ожидаемо
* Реализовать метод zip, который будет создавать Option от пары значений из 2-х Option | ||
*/ | ||
|
||
def zip[A1 >: T, B](option2: Option[B]): Option[(T, B)] = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
здесь тоже, если один из Option пустой, мы получим ошибку в рантайме. Фишка Option в том, что он дает нам безопасный API с точки зрения падений в рантайме, за исключением одного небезопасного метода - это get, его использовать не рекомендуется, за исключением случаев, когда мы предварительно убедились, что он не пуст. Подумайте, как реализовать безопасно.
*/ | ||
|
||
def filter(p: T => Boolean): Option[T] = { | ||
if (!this.isEmpty) this |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
здесь у вас не используется предикат p
который вы приняли в качестве аргумента. Здесь для реализации хорошо подойдёт pattern matching
* Nil - пустой список | ||
* Cons - непустой, содердит первый элемент (голову) и хвост (оставшийся список) | ||
*/ | ||
def get(): T = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
на списках такой метод обычно называют head, и здесь тоже лучше отрабатывать явно кейс пустого списка, бросая конкретный Exception, например - new Exception("head on empty list"), в противном случае будет просто match error
|
||
trait List[+T]{ | ||
def getNext[TT >: T](): List[T] = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
такое на списках обычно называют tail. null возвращать не стоит, в scala мы в целом стараемся избегать подобных историй. Этот метод можно делать безопасным. Что мы можем вернуть в качестве хвоста если список пустой?
|
||
def ::[TT >: T](elem: TT): List[TT] = ??? | ||
def getPrevious[TT >: T](): List[T] = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
не очень понял, чем этот метод отличается от предыдущего?
|
||
case class A(var a: String) | ||
def mkString(delimeter: String): String = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Решение рабочее. Однако для реализации этого и методов ниже, я бы рекомендовал воспользоваться рекурсией. Так же здесь неплохо будет смотреться pattern matching
|
||
def reverse[TT >: T](): List[T] = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
см. коммент к mkString
* Метод mkString возвращает строковое представление списка, с учетом переданного разделителя | ||
* | ||
*/ | ||
def map[TT >: T](func: T => TT): List[T] = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
см. коммент к mkString
* | ||
* Реализовать метод reverse который позволит заменить порядок элементов в списке на противоположный | ||
*/ | ||
def filter[TT >: T](p: T => Boolean): List[T] = { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
см. коммент к mkString
No description provided.