Account Options

  1. Sign in
The old Google Groups will be going away soon, but your browser is incompatible with the new version.
Google Groups Home
« Groups Home
question mutabilité dans une case class
There are currently too many topics in this group that display first. To make this topic appear first, remove this option from another topic.
There was an error processing your request. Please try again.
flag
  16 messages - Collapse all  -  Translate all to Translated (View all originals)
The group you are posting to is a Usenet group. Messages posted to this group will make your email address visible to anyone on the Internet.
Your reply message has not been sent.
Your post was successful
 
From:
To:
Cc:
Followup To:
Add Cc | Add Followup-to | Edit Subject
Subject:
Validation:
For verification purposes please type the characters you see in the picture below or the numbers you hear by clicking the accessibility icon. Listen and type the numbers you hear
 
Ugo Bourdon  
View profile   Translate to Translated (View Original)
 More options Nov 2 2012, 11:51 am
From: Ugo Bourdon <bourdon....@gmail.com>
Date: Fri, 2 Nov 2012 08:51:35 -0700 (PDT)
Local: Fri, Nov 2 2012 11:51 am
Subject: question mutabilité dans une case class

Si j'utilise le type Date (oui je sais c'est mal mais je me pose la
question), qui est muable, comme paramètre d'une case class.
case class PasBien( date: Date )
Comment je fais pour pouvoir redéfinir la valeur date dans le corps du
constructeur pour ne pas récupérer la référence de Date mais une autre et
ne pas retourner la référence de ma classe mais une clonée.
Une idée ?


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Samuel Tardieu  
View profile   Translate to Translated (View Original)
 More options Nov 2 2012, 11:57 am
From: Samuel Tardieu <s...@rfc1149.net>
Date: Fri, 2 Nov 2012 16:56:45 +0100
Local: Fri, Nov 2 2012 11:56 am
Subject: Re: question mutabilité dans une case class

Le 2 novembre 2012 16:51, Ugo Bourdon <bourdon....@gmail.com> a écrit :

> Comment je fais pour pouvoir redéfinir la valeur date dans le corps du
> constructeur pour ne pas récupérer la référence de Date mais une autre et
> ne pas retourner la référence de ma classe mais une clonée.

Je ne suis pas sûr d'avoir bien compris la question, mais si tu cherches à
retourner une instance d'une classe autre que celle dont tu appelles le
constructeur, tu ne peux pas : le constructeur ne retourne rien, il
construit le contenu d'une instance qui a déjà été créée, c'est son rôle.
Envisage de passer par une usine (factory) si c'est ce que tu souhaites.

  Sam


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Nicolas Dasriaux  
View profile   Translate to Translated (View Original)
 More options Nov 2 2012, 12:08 pm
From: Nicolas Dasriaux <n.dasri...@gmail.com>
Date: Fri, 2 Nov 2012 17:08:55 +0100
Local: Fri, Nov 2 2012 12:08 pm
Subject: Re: question mutabilité dans une case class

A ma connaissance... (je peux me tromper)

Quand tu code une case class Meeting(date: Date) , c'est en fait du sucre
syntaxique qui génère :

   - Une méthode apply sur l'object compagnon Meeting
   - Et la méthode unapply pour le pattern matching, mais là j'ai pas les
   détail en tête.

Si tu as par exemple au départ ça :

case class Meeting(date: Date)

Tu voudrais obtenir ça, pour la copie défensive :

class Meeting(pDate: Date)  {
  def date = ... // clonage de la date pDate

}

Mais pour que cela continue de se comporter comme un case class, il
faudriat ajouter à la main le code qui est généré tout seul quand tu as le
modificateur case.

Soit sur l'objet compagnon (dans le même fichier de code source)

object Meeting() {
  def apply(pDate: Date) = new Meeting(pDate)

}

Plus le unapply pour le pattern matching...
A ce sujet, je crois qu'il y a déjà une présentation qui a circulé ci surle
pattern matching qui détaillait le unapply.

Le 2 novembre 2012 16:56, Samuel Tardieu <s...@rfc1149.net> a écrit :


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Ugo Bourdon  
View profile   Translate to Translated (View Original)
 More options Nov 2 2012, 12:10 pm
From: Ugo Bourdon <bourdon....@gmail.com>
Date: Fri, 2 Nov 2012 09:10:22 -0700 (PDT)
Local: Fri, Nov 2 2012 12:10 pm
Subject: Re: question mutabilité dans une case class

En gros en java je peux faire
public class MyClass {
private final Date date;
  public MyClass( final Date date) {
    this.date = new Date( date.getTime )
  }

  public Date getDate() {
    return date.clone();
  }

}

et je veux faire un truc du genre avec une case class
Le vendredi 2 novembre 2012 16:57:09 UTC+1, Samuel Tardieu a écrit :


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Nicolas Dasriaux  
View profile   Translate to Translated (View Original)
 More options Nov 2 2012, 12:14 pm
From: Nicolas Dasriaux <n.dasri...@gmail.com>
Date: Fri, 2 Nov 2012 17:14:09 +0100
Local: Fri, Nov 2 2012 12:14 pm
Subject: Re: question mutabilité dans une case class

class Meeting(pDate: Date)  {
  private[this] val fDate = new Date(pDate.getTime)

  def date = fDate.clone // clonage de la date pDate

}

object Meeting {
  def apply(pDate: Date) = new Meeting(pDate)

}

Et toujours le code pour le pattern matching...

Le 2 novembre 2012 17:10, Ugo Bourdon <bourdon....@gmail.com> a écrit :


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Jean-Luc CANELA  
View profile   Translate to Translated (View Original)
 More options Nov 2 2012, 12:18 pm
From: Jean-Luc CANELA <jlcane...@gmail.com>
Date: Fri, 2 Nov 2012 17:18:32 +0100
Local: Fri, Nov 2 2012 12:18 pm
Subject: Re: question mutabilité dans une case class

Tu es sûr d'avoir besoin d'une case class ?

Ca me fait penser à cette discussion:
http://www.scala-lang.org/node/3160

Jean-Luc

On 2 nov. 2012, at 17:10, Ugo Bourdon wrote:


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Nicolas Dasriaux  
View profile   Translate to Translated (View Original)
 More options Nov 2 2012, 12:21 pm
From: Nicolas Dasriaux <n.dasri...@gmail.com>
Date: Fri, 2 Nov 2012 17:21:14 +0100
Local: Fri, Nov 2 2012 12:21 pm
Subject: Re: question mutabilité dans une case class

Ou utiliser Joda Times qui est non-mutable par nature...

Le 2 novembre 2012 16:51, Ugo Bourdon <bourdon....@gmail.com> a écrit :


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Nicolas Dasriaux  
View profile   Translate to Translated (View Original)
 More options Nov 2 2012, 12:26 pm
From: Nicolas Dasriaux <n.dasri...@gmail.com>
Date: Fri, 2 Nov 2012 17:26:41 +0100
Local: Fri, Nov 2 2012 12:26 pm
Subject: Re: question mutabilité dans une case class

Je dis une bétise ou si on pas besoin du pattern matching pas besoin
d'utiliser une casse class... ?

Le 2 novembre 2012 17:18, Jean-Luc CANELA <jlcane...@gmail.com> a écrit :


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Jérôme Mainaud  
View profile   Translate to Translated (View Original)
 More options Nov 2 2012, 12:35 pm
From: Jérôme Mainaud <jer...@mainaud.com>
Date: Fri, 2 Nov 2012 17:35:42 +0100
Local: Fri, Nov 2 2012 12:35 pm
Subject: Re: question mutabilité dans une case class

En fait, tu n'as même pas besoin d'une case class pour faire du pattern
matching.

--
Jérôme Mainaud
jer...@mainaud.com

Le 2 novembre 2012 17:26, Nicolas Dasriaux <n.dasri...@gmail.com> a écrit :


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Nicolas Dasriaux  
View profile   Translate to Translated (View Original)
 More options Nov 2 2012, 12:36 pm
From: Nicolas Dasriaux <n.dasri...@gmail.com>
Date: Fri, 2 Nov 2012 17:36:56 +0100
Local: Fri, Nov 2 2012 12:36 pm
Subject: Re: question mutabilité dans une case class

En plus complet, mais je peux pas coder pour vérifier...

class Meeting(val location: String, pDate: Date)  {
  private[this] val fDate = new Date(pDate.getTime)

  def date = fDate.clone // clonage de la date pDate

}

object Meeting {
  def apply(location: String, date: Date) = new Meeting(location, date)
  def unapply(meeting: Meeting): Option[(String, Date)] =
Some(meeting.place, meeting.date)

}

Grâce à la méthode apply, tu peux ecrire :

Meeting("Salle 225", date)

au lieu de

new Meeting("Salle 225", date)

Grâce à la méthode unapply, tu peux écrire :

meeting match {
  case Meeting(location, date) => ...

}

ou

val Meeting(location, date) = meeting

Le 2 novembre 2012 17:26, Nicolas Dasriaux <n.dasri...@gmail.com> a écrit :


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Nicolas Dasriaux  
View profile   Translate to Translated (View Original)
 More options Nov 2 2012, 12:37 pm
From: Nicolas Dasriaux <n.dasri...@gmail.com>
Date: Fri, 2 Nov 2012 17:37:51 +0100
Local: Fri, Nov 2 2012 12:37 pm
Subject: Re: question mutabilité dans une case class

Effectivement, il suffit de coder son unapply.

Le 2 novembre 2012 17:35, Jérôme Mainaud <jer...@mainaud.com> a écrit :


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Jérôme Mainaud  
View profile   Translate to Translated (View Original)
 More options Nov 2 2012, 12:41 pm
From: Jérôme Mainaud <jer...@mainaud.com>
Date: Fri, 2 Nov 2012 17:41:47 +0100
Local: Fri, Nov 2 2012 12:41 pm
Subject: Re: question mutabilité dans une case class

J'ai vu, ton exemple a croisé ma réponse. :-)
Le case class apporte aussi les méthodes equals, hashCode et toString.

--
Jérôme Mainaud
jer...@mainaud.com

Le 2 novembre 2012 17:37, Nicolas Dasriaux <n.dasri...@gmail.com> a écrit :


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Nicolas Dasriaux  
View profile   Translate to Translated (View Original)
 More options Nov 2 2012, 12:44 pm
From: Nicolas Dasriaux <n.dasri...@gmail.com>
Date: Fri, 2 Nov 2012 17:44:39 +0100
Local: Fri, Nov 2 2012 12:44 pm
Subject: Re: question mutabilité dans une case class

Je me disais bien que j'oubliais quelque chose. ;-)

Le 2 novembre 2012 17:41, Jérôme Mainaud <jer...@mainaud.com> a écrit :


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Ugo Bourdon  
View profile   Translate to Translated (View Original)
 More options Nov 2 2012, 12:59 pm
From: Ugo Bourdon <bourdon....@gmail.com>
Date: Fri, 2 Nov 2012 09:59:49 -0700 (PDT)
Local: Fri, Nov 2 2012 12:59 pm
Subject: Re: question mutabilité dans une case class

En fait si on fait ca, ca devrait suffire :

case class MyClass( myStringField: String, state: Boolean, private val
test: Test ) {
    private val _test = new Test( test.int )
    def getTest: Test = _test

}

Et pour info j'ai pas besoin de ca. Juste une recherche pour l'écriture
d'un article sur mon blog.

Le vendredi 2 novembre 2012 17:44:40 UTC+1, Nicolas Dasriaux a écrit :


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Nicolas Dasriaux  
View profile   Translate to Translated (View Original)
 More options Nov 2 2012, 1:11 pm
From: Nicolas Dasriaux <n.dasri...@gmail.com>
Date: Fri, 2 Nov 2012 18:11:44 +0100
Local: Fri, Nov 2 2012 1:11 pm
Subject: Re: question mutabilité dans une case class

Pas tout à fait... je crois...

1) Il me semble que pour les case class, le modificateur val est implicite
sur tous les paramètres du constructeur.
Donc, dans le contexte d'une case class, il me semble que :

private val test: Test

est équivalent à

private test: Test

2) Tu te retrouve avec 2 champs (mais j'ai quand même un doute sur ce que
je dis)  :

   - test
   - _test

3) C'est pas terrible pour le principe d'uniformité d'accès : on voudrait
une méthode test et pas getTest, non ?

Le 2 novembre 2012 17:59, Ugo Bourdon <bourdon....@gmail.com> a écrit :


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
Jonathan Winandy  
View profile   Translate to Translated (View Original)
 More options Nov 2 2012, 6:56 pm
From: Jonathan Winandy <jonathan.wina...@gmail.com>
Date: Fri, 2 Nov 2012 23:55:37 +0100
Local: Fri, Nov 2 2012 6:55 pm
Subject: Re: question mutabilité dans une case class

Ugo, tu me fais peur, j'espère que tu vas mettre dans ton article de
wrapper ce qui est mutable avant de l'utiliser ...

2012/11/2 Nicolas Dasriaux <n.dasri...@gmail.com>


 
You must Sign in before you can post messages.
To post a message you must first join this group.
Please update your nickname on the subscription settings page before posting.
You do not have the permission required to post.
End of messages
« Back to Discussions « Newer topic     Older topic »