1

そこで、listコマンドを使用してこれを機能させるために、同様の名前のスレッドを使用しました。これが私の作業コードです:

proc E364xA::Connect [list [list VisaAlias ${E364xA::DefaultAlias}]] {

    ::VISA::Connect $VisaAlias
}

現在、これは名前空間eval内のDefaultAliasに格納されている値を使用して機能しています。これを行うためのより直感的な方法があるかどうか疑問に思いました:

proc E364xA::Connect {{VisaAlias ${E364xA::DefaultAlias}}} {

    ::VISA::Connect $VisaAlias
}

この方法では、2つのリストコマンドで水を混乱させることはありません。何か案は?

よろしくお願いします!

4

3 に答える 3

4

より多くの構文糖衣を提供する別の方法は見当たりません。ただし、次のようなことができます。

proc E364xA::Connect {{VisaAlias -use-default}} {
    if {$VisaAlias == "-use-default"} { 
        set VisaAlias ${E364xA::DefaultAlias}
    }

    ::VISA::Connect $VisaAlias
}

使用例:

E364xA::Connect                 ;# Use the default value
E364xA::Connect -use-default    ;# Use the default value
E364xA::Connect somethingElse   ;# Non default
于 2013-01-02T16:27:46.310 に答える
1

多分これ?(以前の編集を削除しました。)

proc E364xA::Connect "{VisaAlias {$E364xA::DefaultAlias}}" {

    ::VISA::Connect $VisaAlias
}

テスト

簡略化したテストは次のとおりです。

set def "hello, world!"

proc test "{var {$def}}" {
    puts $var
}

test

出力:

hello, world!
于 2013-01-02T16:28:03.690 に答える
1

引数を使用することもできますがargs、コードほど明確ではなく、procが最大で1つの引数を取る必要があるという事実を隠しています。

proc E364xA::Connect args {
    if {[llength $args] == 0} {
        set VisaAlias $E364xA::DefaultAlias
    } else {
        set VisaAlias [lindex $args 0]
    }
    ::VISA::Connect $VisaAlias
}

また

proc E364xA::Connect args {
    ::VISA::Connect [expr {[llength $args] ? [lindex $args 0] : $E364xA::DefaultAlias}]
}
于 2013-01-02T16:37:23.043 に答える