Aracılığıyla paylaş


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:

  1. Değerlendirilecek bir çift noktalı virgül ( ;; ) ile tüm kod sonlandırılmalıdır
  2. Kod değerlendirilir ve bir it değer olarak depolanır. Etkileşimli olarak başvurabilirsiniz it .

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 Script1Bildirim 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

fsiF # 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

#rDaha ö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.

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.