F # 하나의 불가사의를 사용하기 전에 C#으로 작성된 응용 프로그램에서 F # 함수를 사용할 수 있습니까? http://msdn.microsoft.com/ru-ru/magazine/cc164244.aspx 하지만 여기서 F # 함수 언어는 여러 가지 수학 함수 (내 동성 연쇄를 용인 할 수 있습니다)를 작성하는 데 유용하지만, 왜 여기서 빵을 가져 가야합니까? 객체 지향 언어, 왜 F #에서 WinForms 또는 WebForms 컨트롤 페이지를 사용하여 이해할 수없는 코드를 작성합니까? 왜냐하면 F # 어셈블리에서 함수를 호출하는 방법을 즉시 궁금해했기 때문입니다. 코드를 작성할 때 tipizaciâmi가있는 기능 언어에 어려움이 있기 때문에 C# 어셈블리의 F # 함수를 사용하는 경우 이러한 어려움이 증가한다고 말하고 싶습니다. 사업을 시작하십시오. 예를 들어 C# 콘솔 응용 프로그램과 F # 어셈블리가 포함 된 프로젝트를 만듭니다. F # 어셈블리에서 하나의 파일 MyFunctions이 필요합니다. fs. 여기서 우리는 함수형 언어로 작성하는 것이 더 쉽다고 생각하는 몇 가지 기능을 설명합니다. 예를 들어, 변환 함수 배열 인 경우에도 RGB에서 YCbCr 색상 공간으로 비트 맵 이미지가 표시됩니다 (이 예일뿐입니다). F 번호의 입력은 약이 될 수 있습니다
open System
let RGB_to_YCbCr (r : double,g : double,b : double) =
let y = 0.299 * r + 0.587 * g + 0.114 * b in
let Cb = (-0.1687) * r - 0.3313 * g + 0.5 * b + 128.0 in
let Cr = 0.5 * r - 0.4187 * g - 0.0813 * b + 128.0 in
(y,Cb,Cr);
let RGB_to_YCbCr_v (v : _ array) =
RGB_to_YCbCr (v.[0], v.[1], v.[2]);
let Process (image : _ array) =
let lenght = Array.length image in
let imageYCbCr = Array.create lenght (0.0, 0.0, 0.0) in
for index = 0 to lenght - 1 do
imageYCbCr.[index] <- RGB_to_YCbCr_v (image.[index])
done
imageYCbCr
은 조립 후, 우리는 기능에 대한 액세스를 볼 수 있습니다뿐만 아니라 이상한보기 네임 스페이스를 가지고 있고, 사용 방법 것은 명확하지 않다. 반사경을 사용할 수있는 어셈블리에서 함수의 위치를 확인하십시오. 네임 스페이스와 클래스를 설명하려면 #light : 모듈 바로 뒤에 다음 줄을 추가해야합니다. FSharp.Sample.MyFunctions 아래에 설명 된 모든 함수에 MyFunctions 클래스가 포함된다는 사실은 분명합니다. fsharp.Core 네임 스페이스 . 프로젝트가 다시 끝나면 어셈블리에서 fsharp.Core 네임 스페이스 샘플을 볼 수 있습니다. 여기에는 위에서 설명한 MyFunctions 정적 메서드 클래스가 있습니다. 우리의 콘솔 응용 프로그램에서 더 자세히 읽으십시오. Assembly에 대한 참조 설정 fsharp.core Sample은 F #에 대한 Assembly의 이름이고 fsharp.core는 F # type Triple의 유형 (클래스)을 사용합니다. 다음 코드를 작성하십시오.
using System;
using FSharp.Sample;
namespace CSharp.Sample.Console
{
class Program
{
static void Main()
{
double[][] image = new double[1000][];
Random rand = new Random();
for (int i = 0; i < 1000; i ++)
{
image[i] = new double[3];
image[i][0] = rand.Next();
image[i][1] = rand.Next();
image[i][2] = rand.Next();
}
foreach (var doubles in MyFunctions.Process(image))
{
System.Console.WriteLine(doubles);
}
}
}
}
처음에는 fsharp.Core 네임 스페이스를 사용하도록 지정했습니다. 코드에서 우리는 데이터 배열을 생성하고 함수 MyFunction에 전달합니다. Process : 선택한 알고리즘으로 변환합니다. 우리는 "Microsoft fsharp.core .. Tuple'3"에서 데이터 형식의 배열로 반환됩니다.
더 좋은 방법이 있는지 확실하지 않지만 단순히 솔루션 (DLL)에 F # 프로젝트를 추가하고 C# 프로젝트에서 참조 할 수 있습니다. 그렇다면 C#에서 F # 메서드를 호출 할 수 있어야합니다. – Luaan