了解大括号的用法

发布于 2024-08-20 07:12:10 字数 101 浏览 6 评论 0原文

我正在学习 Tcl/Tk,对 tcl 中花括号的使用感到困惑。

对我来说,它似乎既用于指示范围又用于声明字符串!这是一个错误(或功能)吗?

我的解释正确吗?

I'm learning Tcl/Tk and am confused on the usage of curly braces in tcl.

To me it seems to be used to both indicate scope and declare strings! Is this a bug (or feature)?

Is my interpretation correct?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

野鹿林 2024-08-27 07:12:10

简而言之,

  • Tcl 的大括号就像 sh 的单引号一样——将单词(和行)分组而不进行插值。
  • Tcl 的双引号的作用类似于 sh 的双引号——允许插值。

事实上,在 proc 定义中使用花括号并不是强制性的。这只是将脚本作为参数传递给 proc 而不进行插值的最方便的方法。

它们是等价的

proc add3 {a b c} {
    return [expr {$a + $b + $c}]
}

proc add3_weird [list a b c] "return \[expr {\[set a] + \[set b] + \[set c]}]"

一旦您内部化了 Tcl 引用,您就会意识到 Tcl 是多么的灵活。

In a nutshell,

  • Tcl's braces act like sh's single quotes -- group words (and lines) without interpolation.
  • Tcl's double quotes act like sh's double quotes -- allowing interpolation.

The fact that you use curly braces in a proc definition is not mandatory. It's just the most convenient way to pass a script as an argument to proc without interpolating.

These are equivalent

proc add3 {a b c} {
    return [expr {$a + $b + $c}]
}

and

proc add3_weird [list a b c] "return \[expr {\[set a] + \[set b] + \[set c]}]"

Once you internalize Tcl quoting, you'll realize how truly flexible Tcl can be.

美人迟暮 2024-08-27 07:12:10

在回复 Toddius Zho 的评论时,我看到了一些问题(并且自己提出了)为什么在使用变量时使用大括号,例如 ${var}

在 TCL 中,标准标量变量可以由任何字符组成。
然而,变量替换运算符“$”假设您使用的是字母数字字符和下划线(加上名称空间分隔符“::”),

因此如果使用非字母数字字符(例如“!”)设置变量,则在尝试替换时TCL将出错替换变量。

% set myvar! 123
123
% puts $myvar!
can't read "myvar": no such variable

使用大括号替换运算符不会出错:

% set myvar! 123
123
%puts ${myvar!}
123

这是因为 TCL 不会对大括号内定义的任何内容执行替换/插值。

http://www.tcl.tk/man/tcl8.5/TclCmd /Tcl.htm

In reply to Toddius Zho's comment, I've seen a few questions (and had them my self) why curly braces are used when using variables e.g. ${var}

In TCL a standard scalar variable can be comprised of any character.
However the variable substitution operator "$" assumes you are using alphanumeric characters and underscores (plus name space separators "::")

So if a variable is set with a non alphanumeric character, such as "!", TCL will error when attempting to substitute the variable.

% set myvar! 123
123
% puts $myvar!
can't read "myvar": no such variable

Using curly brackets the substitution operator does not error:

% set myvar! 123
123
%puts ${myvar!}
123

This is because TCL does not perform substitution/interpolation on anything defined within curly braces.

http://www.tcl.tk/man/tcl8.5/TclCmd/Tcl.htm

起风了 2024-08-27 07:12:10

大括号将单词组合在一起成为参数。通过谷歌搜索,您可以在互联网上找到大量 tcl 的东西。这是简介

curly braces group words together to become arguments. you can find plenty tcl stuffs on the internet by googling. Here's an intro

乜一 2024-08-27 07:12:10

ma​​n n Tcl

这是 Tcl 解释器的手册页!阅读它。再读一遍!您甚至可以考虑去一个安静的地方大声朗读。这会妨碍你读得太快。每个字母都很重要。

一旦您发现自己陷入“引用地狱”,请返回本文档并再次阅读。

有一个在线版本:
http://www.tcl.tk/man/tcl8.5/ TclCmd/Tcl.htm

man n Tcl

That is the manual page for the Tcl interpreter! Read it. Read it again! You might even consider to go to a quiet place and read it out loud. This will hinder you from reading too fast. Every single letter counts.

Once you find yourself in "quoting hell" go back to this document and read it again.

There is an online version at:
http://www.tcl.tk/man/tcl8.5/TclCmd/Tcl.htm

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文