Skip to content
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

Update w11-content-exercise.tex #852

Merged
merged 3 commits into from
Nov 21, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 18 additions & 4 deletions compendium/modules/w11-context-exercise.tex
Original file line number Diff line number Diff line change
Expand Up @@ -526,13 +526,27 @@

\TaskSolved \what

\SubtaskSolved \TODO

\SubtaskSolved

\SubtaskSolved \TODO
\begin{itemize}
\item Först deklarerar vi en \code{trait}, \code{CanCompare}, med en generisk typparameter \code{T}. Den innehåller en abstrakt metod \code{compare} som tar två parametrar av typen \code{T} och returnerar en \code{Int}.
\item Sedan definieras en metod \code{sort} som också tar en generisk typparameter \code{T}. Metoden tar två parametrar, a och b av typen T, samt en \code{using} parameter cc som måste vara en instans av \code{CanCompare[T]}. Inuti metoden används compare-metoden från CanCompare för att bestämma om a och b ska byta plats eller inte.
\item När vi försöker köra \code{sort(42, 41)} så får vi felmeddelande av kompilatorn. Anledning till detta är att det inte finns en given instans av CanCompare[Int].
\item Vi löser detta på nästa rad med \code{given intComparator} som är av typen \linebreak CanCompare[Int]. Vi definierar även vår abstrakta metod \code{compare} från CanCompare med \code{override def compare}... När vi kör \code{sort(42,41)} på nästa rad fungerar det nu som det ska och vi får tillbaka \code{(Int, Int) = (41, 42)}
\item När vi försöker köra sort med argument av typen \code{Double} får vi ett liknande felmeddelande som vi fick tidigare, och av samma anledning att det inte finns en CanCompare för typen Double.
\end{itemize}

\SubtaskSolved
\begin{REPL}
scala> given doubleComparator: CanCompare[Double] with
override def compare(a: Double, b: Double): Int = (a - b).toInt
\end{REPL}

\SubtaskSolved \TODO
\SubtaskSolved
\begin{REPL}
scala> given stringComparator: CanCompare[String] with
override def compare(a: String, b: String): Int = (a.compareTo(b))
\end{REPL}

\QUESTEND

Expand Down