Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

string.Template identifier #1

Open
g000001 opened this issue Dec 5, 2010 · 10 comments
Open

string.Template identifier #1

g000001 opened this issue Dec 5, 2010 · 10 comments

Comments

@g000001
Copy link
Collaborator

g000001 commented Dec 5, 2010

$identifier names a substitution placeholder matching a mapping key of "identifier". By default, "identifier" must spell a Python identifier.

identifier form for cl

@garaemon
Copy link
Owner

garaemon commented Dec 6, 2010

ん, けっきょくどういうことですか?

@g000001
Copy link
Collaborator Author

g000001 commented Dec 6, 2010

英語で書くのかなと思って途中で挫折してましたw
pythonだと $識別という構成になっている様子で、$は識別子に含まれないのでPythonでは都合が良いのですが、CLだと$も{}も普通にシンボルに使えるのでCLなりに考えた方が良いのかなという気がしました。
:foo:というような形式はどうかなと思っています。:はあまり使われないので。

@garaemon
Copy link
Owner

garaemon commented Dec 6, 2010

pythonで$識別子を使った例ってどんな感じなのでしょうか (Python素人です)

@g000001
Copy link
Collaborator Author

g000001 commented Dec 6, 2010

すいません、大本のドキュメントを示してなかったですね
http://docs.python.org/release/2.7/library/string.html#template-strings
ここの記述です。
$fooというのは多分シェルの記法を踏襲しているのではないかなと思います

@garaemon
Copy link
Owner

garaemon commented Dec 6, 2010

なるほど, 理解しました

:foo:
後ろの:はいりますかね?
普通にキーワードでは微妙でしょうか?

以下の三つのパターンを考えて見ましたが, 使いやすさではキーワードが楽ですね.
ただ, 健全性は微妙です

(substitute ":who likes :what" '((:who . "tim") (:what . "kung pao")))
(substitute ":who: likes :what:" '((":who:" . "tim") (":what:" . "kung pao")))
(substitute ":who: likes :what:" '((|:who:| . "tim") (|:what:| . "kung pao")))

@garaemon
Copy link
Owner

garaemon commented Dec 6, 2010

substituteは識別子がたりないときにエラーにするのですね

>>> d = dict(who='tim')
>>> Template('Give $who $100').substitute(d)
Traceback (most recent call last):
[...]
ValueError: Invalid placeholder in string: line 1, col 10
>>> Template('$who likes $what').substitute(d)
Traceback (most recent call last):
[...]
KeyError: 'what'

文字列中では, :foo:か|foo|でしょうか?
:foo:でよいきがしてきました.

@g000001
Copy link
Collaborator Author

g000001 commented Dec 7, 2010

:foo:にした理由ですが、オリジナルの場合、${foo}ooooとすることによって識別子を他とまざらないようにすることができるのですが、:foo:ooooという感じで再現できるかなというところでした。

@garaemon
Copy link
Owner

garaemon commented Dec 7, 2010

お, なるほど.
デフォルト":"で, キーワードとかで選べるようにするというのはどうでしょうか?

@g000001
Copy link
Collaborator Author

g000001 commented Dec 8, 2010

なるほど、できたらやってみます

@garaemon
Copy link
Owner

garaemon commented Jan 8, 2011

とりあえず適当なものを実装しました.
$と:の問題はとりあえず何も考えずに, pythonのものを踏襲しました.

TODO:
今はdictionaryを文字列で作る仕様にしちゃってますが, シンボルでもできるようにすべき

使い方は

(clap-string:substitute
  (clap-string:make-template
  "$$hoge $hoge $a $$odiejw oiajdeoj fuga piyo ${hoge fuga} $aabbcc")
  (clap-builtin:dict '(("hoge" . "HOGE")
                      ("a" . "A")
                      ("hoge fuga" . "HOGE FUGA")
                      ("aabbcc" . "AABBCC"))
                    :test #'equal))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants