F ile etkileşimli programlama #
F# Etkileşimli (DotNet fsi), konsolda F # kodunu etkileşimli olarak çalıştırmak veya F # betiklerini yürütmek için kullanılır. Diğer bir deyişle, F # Interactive F # için bir REPL (okuma, değerlendirme, yazdırma döngüsü) yürütür.
Konsolundan F# Etkileşimli çalıştırmak için, öğesini çalıştırın dotnet fsi
. Herhangi bir .NET SDK 'sında bulabilirsiniz dotnet fsi
.
Kullanılabilir komut satırı seçenekleri hakkında daha fazla bilgi için bkz. F# etkileşimli seçenekleri.
Kodu doğrudan F# Etkileşimli yürütme
F# Etkileşimli bir REPL (Read-eval-PRINT döngüsü) olduğundan, kodu etkileşimli bir şekilde yürütebilirsiniz. Komut satırından yürüttükten dotnet fsi
sonra etkileşimli bir oturum örneği aşağıda verilmiştir:
Microsoft (R) F# Interactive version 11.0.0.0 for F# 5.0
Copyright (c) Microsoft Corporation. All Rights Reserved.
For help type #help;;
> let square x = x * x;;
val square : x:int -> int
> square 12;;
val it : int = 144
> printfn "Hello, FSI!"
- ;;
Hello, FSI!
val it : unit = ()
İki ana şey fark edersiniz:
- Değerlendirilecek bir çift noktalı virgül (
;;
) ile tüm kod sonlandırılmalıdır - Kod değerlendirilir ve bir
it
değer olarak depolanır. Etkileşimli olarak başvurabilirsinizit
.
F# Etkileşimli, çok satırlı girişi de destekler. Gönderiminizi bir çift noktalı virgül ( ;;
) ile sonlandırın. F# Etkileşimli tarafından yapıştırılmış ve değerlendirilen aşağıdaki kod parçacığını göz önünde bulundurun:
> let getOddSquares xs =
- xs
- |> List.filter (fun x -> x % 2 <> 0)
- |> List.map (fun x -> x * x)
-
- printfn "%A" (getOddSquares [1..10]);;
[1; 9; 25; 49; 81]
val getOddSquares : xs:int list -> int list
val it : unit = ()
>
Kodun biçimlendirmesi korunur ve girişi sonlandıran çift noktalı virgül ( ;;
) vardır. F# Etkileşimli daha sonra kodu değerlendirdi ve sonuçları yazdırılmıştır!
F ile betik oluşturma #
F# Etkileşimli, kodu etkileşimli olarak değerlendirmek harika bir öğrenme aracı olabilir, ancak normal bir düzenleyicide kod yazmak kadar üretken olduğunu hızlıca bulabilirsiniz. Normal kod düzenlemesini desteklemek için F # betikleri yazabilirsiniz.
Betikler . FSXdosya uzantısını kullanır. Kaynak kodu derlemek ve daha sonra derlenen derlemeyi çalıştırmak yerine DotNet fsi 'yi çalıştırabilir ve f # Kaynak Kodu betiğinin dosya adını belirtebilir ve f # Interactive kodu okur ve gerçek zamanlı olarak yürütür. Örneğin, aşağıdaki betiği Script.fsx
göz önünde bulundurun:
let getOddSquares xs =
xs
|> List.filter (fun x -> x % 2 <> 0)
|> List.map (fun x -> x * x)
printfn "%A" (getOddSquares [1..10])
Makinenizde bu dosya oluşturulduğunda, ile dotnet fsi
çalıştırabilir ve doğrudan Terminal pencerenizde çıktıyı görebilirsiniz:
dotnet fsi Script.fsx
[1; 9; 25; 49; 81]
F # komut dosyası Visual Studio, Visual Studio Codeve Mac için Visual Studioyerel olarak desteklenir.
F# Etkileşimli gelen paketlere başvurma
Not
Paket yönetimi sistemi genişletilebilir.
F# Etkileşimli, #r "nuget:"
sözdizimine ve isteğe bağlı sürüme sahip NuGet paketlerine başvurmayı destekler:
#r "nuget: Newtonsoft.Json"
open Newtonsoft.Json
let data = {| Name = "Don Syme"; Occupation = "F# Creator" |}
JsonConvert.SerializeObject(data)
Bir sürüm belirtilmemişse, en yüksek önizleme dışı paket alınır. Belirli bir sürüme başvurmak için sürümü bir virgül ile tanıtın. Bu, bir paketin önizleme sürümüne başvururken yararlı olabilir. Örneğin, Diffsharp'un önizleme sürümünü kullanarak bu betiği göz önünde bulundurun:
#r "nuget: DiffSharp-lite, 1.0.0-preview-328097867"
open DiffSharp
// A 1D tensor
let t1 = dsharp.tensor [ 0.0 .. 0.2 .. 1.0 ]
// A 2x2 tensor
let t2 = dsharp.tensor [ [ 0; 1 ]; [ 2; 2 ] ]
// Define a scalar-to-scalar function
let f (x: Tensor) = sin (sqrt x)
printfn $"{f (dsharp.tensor 1.2)}"
Paket kaynağı belirtme
Ayrıca, #i
komutuyla bir paket kaynağı belirtebilirsiniz. Aşağıdaki örnek, uzak ve yerel bir kaynağı belirtir:
#i "nuget: https://my-remote-package-source/index.json"
#i """nuget: C:\path\to\my\local\source"""
Bu, Ayrıca, bir betiğe eklenen uzak ve/veya yerel kaynakları hesaba katan, bu çözüm motoruna ele alınacaktır.
Bir komut dosyasında istediğiniz sayıda paket başvurusu belirtebilirsiniz.
Not
Şu anda çerçeve başvuruları kullanan betikler için bir sınırlama vardır (ör. Microsoft.NET.Sdk.Web
veya Microsoft.NET.Sdk.WindowsDesktop
). Sasırasıyla, Giraffe, WinForms gibi paketler kullanılamaz. Bu sorun #9417izleniyor.
F # Interactive ile disk üzerindeki derlemelere başvurma
Alternatif olarak, disk üzerinde bir derlemeniz varsa ve bir betikte başvurmak istiyorsanız, bir derleme belirtmek için söz dizimini kullanabilirsiniz #r
. Aşağıdaki kodu, içinde MyAssembly.dll
derlenmiş bir projede göz önünde bulundurun:
// MyAssembly.fs
module MyAssembly
let myFunction x y = x + 2 * y
Derlendikten sonra, aşağıdakine benzer şekilde adlı Script.fsx
bir dosyada başvuru yapabilirsiniz:
#r "path/to/MyAssembly.dll"
printfn $"{MyAssembly.myFunction 10 40}"
Çıktı aşağıdaki şekilde olacaktır:
dotnet fsi Script.fsx
90
Bir komut dosyasında istediğiniz sayıda derleme başvurusu belirtebilirsiniz.
Diğer betikleri yükleme
Komut dosyası oluştururken, farklı görevler için farklı betikler kullanılması genellikle faydalı olabilir. Bazen bir komut dosyasındaki kodu başka bir betikten yeniden kullanmak isteyebilirsiniz. İçeriğini dosyanıza kopyalamak-yapıştırmak yerine yalnızca ile #load
yüklemeniz ve değerlendirmek için kullanabilirsiniz.
Aşağıdakileri Script1.fsx
göz önünde bulundurun:
let square x = x * x
Ve kullanan dosya Script2.fsx
:
#load "Script1.fsx"
open Script1
printfn $"%d{square 12}"
Şöyle değerlendirebilirsiniz Script2.fsx
:
dotnet fsi Script2.fsx
144
Bir komut dosyasında istediğiniz kadar çok #load
yönergesi belirtebilirsiniz.
Not
open Script1
Bildirim gereklidir. Bunun nedeni, bir F # betiğindeki yapıların içinde bulunduğu komut dosyasının adı olan en üst düzey bir modüle derlenmesinden kaynaklanır. Betik dosyasının küçük harfli bir adı script3.fsx
varsa, kapsanan modül adı otomatik olarak büyük harfli olur ve kullanmanız open Script3
gerekir. Belirli bir modül ad alanında yapıları tanımlamak için bir yüklenebilir betik isterseniz, modül bildiriminin bir ad alanı ekleyebilirsiniz, örneğin:
module MyScriptLibrary
fsi
F # kodundaki nesneyi kullanma
F # betikleri, F# Etkileşimli oturumunu temsil eden özel fsi
bir nesneye erişebilir. Çıktı biçimlendirme gibi şeyleri özelleştirmenizi sağlar. Komut satırı bağımsız değişkenlerine de erişebilirsiniz.
Aşağıdaki örnek, komut satırı bağımsız değişkenlerinin nasıl alınacağını ve kullanılacağını göstermektedir:
let args = fsi.CommandLineArgs
for arg in args do
printfn $"{arg}"
Değerlendirildiğinde, tüm bağımsız değişkenleri yazdırır. İlk bağımsız değişken her zaman değerlendirilen betiğin adıdır:
dotnet fsi Script1.fsx hello world from fsi
Script1.fsx
hello
world
from
fsi
Aynı bağımsız değişkenlere erişmek için de kullanabilirsiniz System.Environment.GetCommandLineArgs()
.
F# Etkileşimli yönerge başvurusu
#r
Daha önce görülen ve #load
yönergeleri yalnızca F# etkileşimli kullanılabilir. Yalnızca F# Etkileşimli kullanılabilen çeşitli yönergeler vardır:
Deki | Description |
---|---|
#r "nuget:..." |
NuGet bir pakete başvurur |
#r "assembly-name.dll" |
Diskteki bir derlemeye başvurur |
#load "file-name.fsx" |
Bir kaynak dosyayı okur, derler ve çalıştırır. |
#help |
Kullanılabilir yönergeler hakkındaki bilgileri görüntüler. |
#I |
Bir derleme arama yolunu tırnak işaretleri halinde belirtir. |
#quit |
F# Etkileşimli oturumunu sonlandırır. |
#time "on" veya #time "off" |
, #time Performans bilgilerinin görüntülenip görüntülenmeyeceğini gösterir. "on" F# Etkileşimli, yorumlanan ve yürütülen kodun her bölümü için gerçek zamanlı, CPU süresini ve çöp toplama bilgilerini ölçer. |
F# Etkileşimli dosya veya yolları belirttiğinizde, bir dize sabit değeri beklenmektedir. Bu nedenle, dosyalar ve yollar tırnak işaretleri içinde olmalı ve normal kaçış karakterleri de geçerlidir. Karakteri, @
bir yolu içeren dizeyi tam bir dize olarak yorumlamasını F# Etkileşimli neden olması için kullanabilirsiniz. Bu, F# Etkileşimli kaçış karakterlerini yoksaymasına neden olur.
Etkileşimli ve derlenmiş Önişlemci yönergeleri
Etkileşimli olarak çalıştırdığınız veya bir betiği çalıştırdığınıza bakılmaksızın F# Etkileşimli kod derlerken etkileşimli sembol tanımlanmıştır. Derleyicide kod derlerken, derlenen sembol tanımlanmıştır. Bu nedenle, kodun derlenmiş ve etkileşimli modlarda farklı olması gerekiyorsa, bu ön işlemci yönergelerini koşullu derleme için kullanabilirsiniz. Örnek:
#if INTERACTIVE
// Some code that executes only in FSI
// ...
#endif
Visual Studio F# Etkileşimli kullanma
Visual Studio aracılığıyla F# Etkileşimli çalıştırmak için F# Etkileşimlietiketli uygun araç çubuğu düğmesine tıklayabilir veya Ctrl + Alt + Ftuşlarını kullanabilirsiniz. Bunu yapmak, F# Etkileşimli oturum çalıştıran bir araç penceresi olan etkileşimli pencereyi açar. Ayrıca etkileşimli pencerede çalıştırmak istediğiniz kod ve Alt + Entertuş birleşimine basabilirsiniz. F# Etkileşimli, F# Etkileşimlietiketli bir araç penceresinde başlatılır. Bu tuş bileşimini kullanırken düzenleyici penceresinin odakta olduğundan emin olun.
konsolunu veya konsolunu Visual Studio komut istemi görüntülenir ve yorumlayıcı girişinizi bekler. Kodu bir kod dosyasında olduğu gibi girebilirsiniz. Kodu derlemek ve yürütmek için, bir satırı veya birkaç giriş satırı sonlandırmak için iki noktalı virgül (;;) girin.
F# Etkileşimli derlemeyi dener ve başarılı olursa kodu yürütür ve derlediği türlerin ve değerlerin imzasını yazdırır. Hatalar oluşursa yorumlayıcı hata iletilerini yazdırır.
Aynı oturumda girilen kodun daha önce girilen herhangi bir yapıya erişimi vardır, bu nedenle program kurabilirsiniz. Araç penceresindeki kapsamlı bir arabellek, gerekirse kodu bir dosyaya kopyalamaya olanak sağlar.
Visual Studio F# Etkileşimli projenizin bağımsız olarak çalıştırabilirsiniz; bu nedenle, işlevin kodunu etkileşimli pencereye kopyalamadıkça F# Etkileşimli'de projeniz içinde tanımlanan yapıları kullanılamaz.
Ayarları ayarlayarak F# Etkileşimli komut satırı bağımsız değişkenlerini (seçenekler) kontrol edebilirsiniz. Araçlar menüsünde Seçenekler... seçeneğini belirleyin veF# Araçları'ı genişletin. Değiştirebilirsiniz iki ayar, F# Etkileşimli seçenekleri ve 64 bit F# Etkileşimli ayarıdır. Bu ayar yalnızca 64 bit makinede F# Etkileşimli çalışıyorsanız uygun olur. Bu ayar, 32 bit veya 64 bit işlem olarak çalıştırıp çalıştırmayacaklarını belirlemek için makine mimarisini kullanan fsi.exe veya fsianycpu.exe'nin ayrılmış 64 bit sürümünü çalıştırmak isteyip istemediklerini belirler.
İlgili makaleler:
Başlık | Açıklama |
---|---|
F# Etkileşimli Seçenekleri | Komut satırı söz dizimi ve komut satırı F# Etkileşimli seçenekleri fsi.exe. |