Har just haft Scala-kurs

81 views
Skip to first unread message

Mats Henricson

unread,
May 14, 2012, 2:40:12 PM5/14/12
to scala-sverige
En dagskurs, gick rätt bra tror jag. Under kursen var det två saker
jag hade lite svårt att förklara.
Kanske finns det bra förklaringar i standardverket...?

1. Varför klarar inte Scala av currying utan att man delar upp alla
parametrar i separata curryable grupper?

Dvs, varför måste man göra såhär?

def modN(n: Int)(x: Int) = ((x % n) == 0)

2. Jag blir sjukt förvirrad av att man ibland, speciellt i
for-comprehensions, kan byta ut () mot {}. När, var, hur, varför?
Framför allt VADAN? Gah!

Ja, ville bara ventilera lite luft. :-)

Mats

√iktor Ҡlang

unread,
May 14, 2012, 2:59:40 PM5/14/12
to scala-...@googlegroups.com
Hej Mats,

2012/5/14 Mats Henricson <mats.he...@crisp.se>

En dagskurs, gick rätt bra tror jag. Under kursen var det två saker
jag hade lite svårt att förklara.
Kanske finns det bra förklaringar i standardverket...?

1. Varför klarar inte Scala av currying utan att man delar upp alla
parametrar i separata curryable grupper?

Jag tror du blandar ihop currying med partial application: http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application

scala> def foo(a: Int, b: Int) = a * b
foo: (a: Int, b: Int)Int

scala> (foo(1,_:Int))(1)
res5: Int = 1
 

Dvs, varför måste man göra såhär?

Se ovan.
 

def modN(n: Int)(x: Int) = ((x % n) == 0)

2. Jag blir sjukt förvirrad av att man ibland, speciellt i
for-comprehensions, kan byta ut () mot {}. När, var, hur, varför?
Framför allt VADAN? Gah!

Enda skillnaden är att med () så blir semikolon inferens sämre.

Läsbarheten med multiple generatorer blir däremot lite lurig med braces:

for {
  x <- y
  z <- w
} {
  println(x + " " + z)
}

Cheers,
 

Ja, ville bara ventilera lite luft. :-)

Mats

--
Det här meddelandet skickas till dig eftersom du prenumererar på gruppen scala-sverige i Google Groups.
Om du vill göra ett inlägg i den här gruppen skickar du e-post till scala-...@googlegroups.com.
Om du vill sluta prenumerera på den här gruppen skickar du e-post till scala-sverig...@googlegroups.com.
För fler alternativ, besök gruppen på http://groups.google.com/group/scala-sverige?hl=sv.




--
Viktor Klang

Akka Tech Lead
Typesafe - The software stack for applications that scale

Twitter: @viktorklang

Olle Kullberg

unread,
May 15, 2012, 2:54:39 AM5/15/12
to scala-...@googlegroups.com
Jag tycker att man alltid ska följa (Davetron5000 och D. Spiewak) Scala Style Guide som nu finns på http://docs.scala-lang.org/style/control-structures.html

Här kan man se att följande gäller:

  1. // wrong!
  2. for (x <- board.rows; y <- board.files)
  3. yield (x, y)
  4. // right!
  5. for {
  6. x <- board.rows
  7. y <- board.files
  8. } yield (x, y)

Men:

  1. // wrong!
  2. for {
  3. x <- board.rows
  4. y <- board.files
  5. } {
  6. printf("(%d, %d)", x, y)
  7. }
  8. // right!
  9. for (x <- board.rows; y <- board.files) {
  10. printf("(%d, %d)", x, y)
  11. }


2012/5/14 √iktor Ҡlang <viktor...@gmail.com>
Reply all
Reply to author
Forward
0 new messages