Nimで複数のタイプのパラメータを定義する

2つのクラスと、どちらかのクラスを同じ方法で変更するプロシージャがあるとします。パラメータを(各クラスの関数を書き換えたりオーバーロードしたりする代わりに)いずれかのクラスにできるように指定するにはどうすればよいですか?簡単な例:

type 
  Class1[T] = object
    x: T

  Class2[T] = object
    x: T
    y: T

# this works fine
proc echoX[T](c: Class1[T]|Class2[T]) =
  echo c.x

# this does not work
proc addToX[T](c: var Class1[T]|Class2[T], val: T) =
  c.x += val


var c1: Class1[int]
var c2: Class2[int]

# this works fine
echoX(c1)
echoX(c2)

# this does not work
addToX(c1, 10)
addToX(c2, 100)

次のエラーが発生します。

Error: for a 'var' type a variable needs to be passed

クラスごとに個別の手順を使用すると、問題なく動作します。

proc addToX[T](c: var Class1[T], val: T) =
  c.x += val

proc addToX[T](c: var Class2[T], val: T) =
  c.x += val

これは、関数を簡単に書き直すことができる単純な例です。しかし、私はより複雑なクラスとプロシージャのためにこれを行うことを探しています。継承が適切な場合もありますが、基本クラスの代わりにNimクラスを変数としてプロシージャに渡すことができないようです。

def-

角かっこはこの問題を修正します。そうでない場合は、以下varに適用されClass1[T]ます。

proc addToX[T](c: var (Class1[T]|Class2[T]), val: T) =

後でこれで別のコンパイラのバグに遭遇する可能性があります:https//github.com/nim-lang/Nim/issues/1385

おそらくあなたのユースケースでは、オブジェクトのバリアントまたは継承とメソッドの方がうまくいくでしょう。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

入力タイプにパラメーターを追加する関数のタイプを定義する

分類Dev

ジュリア:複数のパラメトリックタイプでpromote_ruleを定義する

分類Dev

同じタイプの複数のパラメーターを使用してGETリクエストのURIパターンを定義する方法

分類Dev

現在のクラスのサブタイプでタイプパラメーターを定義する

分類Dev

関数定義で関数パラメーターのサブタイプを使用できますか?

分類Dev

Goで関数のパラメータータイプを設定する

分類Dev

DoctrineのネイティブSQL:複数のクエリパラメータのタイプを設定する

分類Dev

複数のパラメータ番号とタイプの「共通」構造を定義する方法はありますか

分類Dev

PowerShellで相互に排他的なパラメーターの複数のグループを定義するにはどうすればよいですか?

分類Dev

php glob()で複数のパターンを定義する方法

分類Dev

同じパラメーターで2つの変数を定義する

分類Dev

複数の含まれるタイプでHaskellタイプを定義する

分類Dev

python角括弧でオプションのパラメータを使用して関数を定義する方法は?

分類Dev

多くの関数間でパラメーター定義を共有するためのパターン

分類Dev

Rubyでメタプログラミングのメソッドパラメーターを定義する

分類Dev

AspectJ ポイントカットでパラメータの数を定義する

分類Dev

複数の関数パラメーターで同じタイプを推測する方法

分類Dev

JavaScriptでモジュール(パターン)の複数のインスタンスを定義する

分類Dev

AFNETWORKINGでパラメータに複数の値を設定する方法

分類Dev

関数Pythonの複数のパラメーター定義

分類Dev

MongoDBプロバイダーで複数のパラメーターをフィルター処理する

分類Dev

nimに「argparse」を使用して可変数のパラメーターを設定する方法

分類Dev

Modelicaのパラメータを介して変数タイプを設定することは可能ですか?

分類Dev

Pythonプログラムで、いくつかのパラメーターを使用してユーザー定義関数を複数回使用できますか?

分類Dev

関数の符号があいまいなポインターパラメーターを定義する

分類Dev

typescript3で特定のタイプの配列としてパラメーターを定義します

分類Dev

Scalaはどのようにしてメソッド定義で複数のパラメーターを受け取ることができますか?

分類Dev

Scalaでデータ型を定義するためのトレイトのtypeパラメーター

分類Dev

パラメータとしてテーブルタイプをとるSQLServerのユーザー定義スカラー関数を呼び出すC#

Related 関連記事

  1. 1

    入力タイプにパラメーターを追加する関数のタイプを定義する

  2. 2

    ジュリア:複数のパラメトリックタイプでpromote_ruleを定義する

  3. 3

    同じタイプの複数のパラメーターを使用してGETリクエストのURIパターンを定義する方法

  4. 4

    現在のクラスのサブタイプでタイプパラメーターを定義する

  5. 5

    関数定義で関数パラメーターのサブタイプを使用できますか?

  6. 6

    Goで関数のパラメータータイプを設定する

  7. 7

    DoctrineのネイティブSQL:複数のクエリパラメータのタイプを設定する

  8. 8

    複数のパラメータ番号とタイプの「共通」構造を定義する方法はありますか

  9. 9

    PowerShellで相互に排他的なパラメーターの複数のグループを定義するにはどうすればよいですか?

  10. 10

    php glob()で複数のパターンを定義する方法

  11. 11

    同じパラメーターで2つの変数を定義する

  12. 12

    複数の含まれるタイプでHaskellタイプを定義する

  13. 13

    python角括弧でオプションのパラメータを使用して関数を定義する方法は?

  14. 14

    多くの関数間でパラメーター定義を共有するためのパターン

  15. 15

    Rubyでメタプログラミングのメソッドパラメーターを定義する

  16. 16

    AspectJ ポイントカットでパラメータの数を定義する

  17. 17

    複数の関数パラメーターで同じタイプを推測する方法

  18. 18

    JavaScriptでモジュール(パターン)の複数のインスタンスを定義する

  19. 19

    AFNETWORKINGでパラメータに複数の値を設定する方法

  20. 20

    関数Pythonの複数のパラメーター定義

  21. 21

    MongoDBプロバイダーで複数のパラメーターをフィルター処理する

  22. 22

    nimに「argparse」を使用して可変数のパラメーターを設定する方法

  23. 23

    Modelicaのパラメータを介して変数タイプを設定することは可能ですか?

  24. 24

    Pythonプログラムで、いくつかのパラメーターを使用してユーザー定義関数を複数回使用できますか?

  25. 25

    関数の符号があいまいなポインターパラメーターを定義する

  26. 26

    typescript3で特定のタイプの配列としてパラメーターを定義します

  27. 27

    Scalaはどのようにしてメソッド定義で複数のパラメーターを受け取ることができますか?

  28. 28

    Scalaでデータ型を定義するためのトレイトのtypeパラメーター

  29. 29

    パラメータとしてテーブルタイプをとるSQLServerのユーザー定義スカラー関数を呼び出すC#

ホットタグ

アーカイブ