シンボルをディレクトリに関連付ける必要があるとします。これは、少数のboundp
シンボルに対してのみ行う必要があります。
私の見方では、2つの簡単な方法があります。
- この関連付けを別の変数(alistまたはハッシュマップ)に格納します。これにより、各シンボルのディレクトリにでアクセスできるようになります
(cdr (assq SYMBOL my-alist))
。 - これをシンボルプロパティに格納します。これにより、でアクセスできるようになります
(get SYMBOL 'my-directory)
。
これらのうち、この情報を追跡する慣用的な方法はどれですか?
値を一時的なスコープに動的にバインドしたい人のためのユースケースがないことを確実に知っているかどうかを示す価値があります(オプション2はほとんど除外されるため)。
—
phils 2015年
@phils良い点。設計上、拘束されることを意図したものではありませんが、それは妥当な懸念事項だと思います。他の人があなたの関数にどんなユースケースを見つけるかは決してわかりません。
—
マラバルバ2015年
@phils:どういう意味ですか?ここで問題となっているのは、シンボルの値ではなく、シンボルの小道具だけです。
—
2015年
(defvar s 5) (put 's 'd "c:/abc/") (let ((s 4)) (message "d: %s, val: %S" (get 's 'd) s))
。そしてOP:なぜあなたはシンボルではなく「機能」について話すのですか?私は何かを逃しているに違いない。
@Drew彼は、シンボルに関連付けられたディレクトリをバインドすることを意味しました。シンボルプロパティを使用する場合は不可能ですが、この情報を連想リストなどの変数に格納することは可能です(連想リストをバインドするだけです)。2番目の質問については、もちろんすべての動作が関数によってラップされるため、「関数」と言いました。機能のないパッケージを見たことがありません。:-)
—
マラバルバ2015年
2人がお互いを理解していれば説明する必要はありませんが、FWIWはまだ理解していません。「dirをバインドする」とは、変数をdir文字列にバインドすることを意味すると想定します。シンボルプロパティの値がシンボルである可能性は確かにあり、そのシンボル値はdir文字列を保持します。
—
2015年
let
-dir-stringシンボル(prop値として使用される)は問題になりません。(適切でない場合は自由に無視してください。)