2016-08-28 11 views
1

コンパイラを使用してスタティックメンバーのタイプを推論するにはどうすればよいですか?コンパイラを使用してスタティックメンバーのタイプを推論するにはどうすればよいですか?

C#6.0では、コンパイラは"using static <namespace>.<class>"ディレクティブを指定することで、静的なプロパティまたはメソッドの型を推論できます。

このように、私は可能な限り小さなコードを書く必要があります。

私は次の静的メンバー持っている:私は、その後、いくつかの種類と機能を定義

module Mock 

type Profile() = 

    static member SomeUserName = "some_user_name" 
    static member SomePassword = "some_password" 

を:

open Mock 

(*Types*) 
type User =  User of string 
type Password = Password of string 
type Credentials = { User:User; Password:Password } 

(*Functions*) 
let login credentials = 
    false 

私は、次のテストがあります。

[<Test>] 
let ``sign in``() = 

    // Setup 
    let credentials = { User=  User  Profile.SomeUserName 
         Password= Password Profile.SomePassword } 
    // Test 
    credentials |> login 
       |> should equal true 

私はSomeUserNameとSomePasswordからプロファイル・タイプ修飾子を削除し、代わりにこれを実行したいと思います:

// Setup 
let credentials = { User=  User  SomeUserName 
        Password= Password SomePassword } 

は私が明示的に静的メンバの型を指定する必要がありますか?

+0

静的型ではなく、 'Profile'をモジュールにします。また、あなたは「推論型」という用語を誤解している。 –

+0

それを指摘してくれてありがとう。私はどのようにそれを表現すべきですか? –

+2

「タイプを推論する」とは、「そのコンテキストや使用方法に基づいて何かのタイプを知る」ことを意味します。これはあなたの問題には当てはまりません。コンパイラは、プロパティから返される値に基づいてプロパティの型が 'string'であると完全に推測できます。あなたが実際に望むところでは、私は「これらの特性を有効範囲に持っていく」と言います。また、あなたの質問から、私はあなたが体系的なアプローチが欠けていると思います。あなたは何が何で、どのように働くのかを知る時間を取らずに、暗闇の中を突き抜こうとしているようです。 –

答えて

5

Fyodor Soikinが指摘する明らかな解決策は、単にProfileをモジュールにすることです。

module Profile = 
    let someUserName = "some_user_name" 
    let somePassword = "some_password" 

次に、あなただけのことができます:これは将来のバージョンで変更することがセットに見えますが、現時点ではF#で静的クラスをオープンすることはできないかもしれないが、

ちなみに
open Profile 

let credentials = { 
    User = User someUserName; 
    Password = Password somePassword 
    } 

を - この機能はされています"原則的に承認された"。詳細については、user voice itemを参照してください。

関連する問題