Rubrik
Textmeddelande
Sök på
:
Forum / Message boards
Publika sidor / Public
Artiklar / articles
Tips & tricks
Program area
Länkar
Tekniker
In English
Favorit
Min profil
0 nya iMail
Kontakta
Hjälp
Chatta
Medlemmar
Erbjudande / aktiviteter
Forum
Artiklar / filmer
Böcker
Frekventa frågor
Programarkiv
Nybörjartips
Testcertifiera dig
Tips / tricks
Köp, byt och sälj
Handla på pellesoft
Tävlingar
Lediga jobb
Företags- och
produktguider
Tekniker
Studenter
Utbildningar
Blandat arkiv
Länkarkivet
Om pellesoft.se
Alla artiklarna
Nyheter
Filmer
Bli skribent
Övrigt
Skicka bidrag
Scope, shadowing, local functions, anonymous functions
Av:
Hans Sterby
Publicerad: 2009-12-17
Scope, shadowing, local values and local functions, anonymous functions
Innehåll
»
Scope
»
Local functions
»
Shadowing
»
Anonymous functions
Scope
Varje värde har sin räckvidd där den kan användas eller vara nåbar.
Standard är att varje värde har sin nåbarhet på modulnivå och kan användas efter sin deklaration.
Men värden deklarerade i en funktion har sin nåbarhet i funktionen och kan inte nås utanför funktionen.
Så en funktion kan nå ett värde deklarerat högre upp i scopet ovanför.
Detta kod exempel är ok:
let
moduleValue
=
10
Let
functionA
x
=
x
+
moduleValue
Detta är inte ok:
let
functionB
x
=
let
functionValue
=
20
x
+
functionValue
//
funktionValue
är
inte
nåbar
utanför
functionB
printfn
"
%A
"
functionValue
Felsvaret blir:
error FS0039: The value or contructor 'functionValue' is not defined
Nåbarheten kan tyckas vara oitressant men har stor betydelse i F#.
I F# kan du ha nästlade funktioner, det är en funktion deklarerad i en funktion.
Den nästlade funktionen kallas en local funktion.
Local functions
I detta exemplel så deklareras en lokal funktion.
let
moduleValue
=
10
let
functionC
p1
p2
=
let
localFunction
p3
=
moduleValue
+
(
p3
*
p3
)
let
a
=
localFunction
moduleValue
p1
let
b
=
localFunction
moduleValue
p2
a
+
b
Nu kan det se konstigt ut med lokala funktioner och att det blir rörigt men i funtionell programmering är det en tillgång att kunna ha funktioner nåbara bara där dom behövs och inte smutsa ner övrig kod.
Shadowing
Man kan tro att man uppdaterar ett värde i F# m,en det som egentligen händer är shadowing.
Ta detta aexempel:
let
x
=
10
let
x
=
20
let
x
=
30
Det som händer är att man sätter ett nytt namn på ett värd där namnet redan har använts och det gamla går inte längre att få tag på.
Anonymous functions
I funktionell programmering så skiljer man inte på värden eller funktioner så det är bekvämt och ofta mer läsbart att skapa en anonym funktion som returnerar det man är ute efter.
En anonym funktion är en funktion utan namn.
Exempel:
let
primes
=
[
2
;
3
;
5
;
7
]
let
primeCubes
=
List.map
(
fun
n
-
>
n
*
n
*
n
)
primes
Vi skapar en lista och för varje element i listan appliseras den anonyma funktionen.
Följ mig på Twitter som TigerHasse.
Vad tyckte du om artikeln?
Ge skribenten eller andra läsare dina tips och kommentarer. Betygsätt artikeln och kommentera gärna anledning till det satta betyget.
Utmärkt
Läsvärd
Intressant
Mindre bra
Dålig
Visningar: 312
Har röstat: 0
Snittbetyg: 0%
Rubrik
Text
Se utskriftsversion
pellesoft it - en resurs att lita på | copyright © 1986-2010 |
regler & avtal
|
cookies