Onze dagmethode #1: Range#coerce

Geplaatst door Michiel de Mare di, 05 feb 2008 08:00:00 GMT

We introduceren een nieuwe feature: de methode van de dag. Hierin demonstreren we een korte, algemeen toepasbare methode. We doen aan verzoekjes!

Vandaag beginnen we met Range#coerce. Het probleem: je hebt een waarde, en je wilt garanderen dat deze binnen een bepaald interval ligt. Klinkt ideaal voor een Range. Een Range heeft wel een methode om te testen of een waarde erbinnen ligt (include?) maar niet om de waarde te forceren.

Vandaar het volgende:

class Range
  def coerce(x)
    x < first ? first : x > last ? last : x
  end
end

(1..12).coerce(999)   # => 12

Geplaatst in ,  | Tags  | 5 reacties

Reacties

  1. p3t0r zei ongeveer 4 uur later:

    Ik dacht dat coerce bedoelt wat om een geforceerde type conversie uit te voeren als twee objecten van een verschillend type maar toch compatible zijn (float vs. complex)?

    Eigenlijk zou ik de methode ‘limit’ of ‘crop’ noemen.

  2. Redmar Kerkhoff zei ongeveer 14 uur later:

    Zover ik dit ben tegen gekomen in de (computer graphics) literatuur heet deze functionaliteit normaliter ‘clampen’ of ‘clamp’.

  3. Michiel zei ongeveer 14 uur later:

    Ja, het geven van een goede naam is eigenlijk nog het moeilijkste. Dat zullen we deze maand nog vaker tegenkomen.

  4. p3t0r zei 1 dag later:

    @Redmar Kerkhoff

    zelf kom (of eigenlijk kwam) ik uit de digitale signaal bewerkings hoek en daar noemden we dit ‘clipping’.

    @Michiel

    volgens mij is de juiste naamgeving voor dit soort functies essentieel anders ga je zeer waarschijnlijk wildgroei krijgen.

    Als ik op zoek zou zijn naar een functie die het bereik van de input limiteerd en niet direct iets kan vinden wat dat doet schrijf ik het zelf ;)

  5. Danny zei 1 dag later:

    squeeze? Volgens http://m-w.com: “to crowd into a limited area”.

(Laat url/e-mail achter »)

   Voorvertoning