是否可以暂时重命名和阻止内置函数?
我希望暂时重命名内置符号并使用不同的名称,同时阻止该符号的主名称。例如,我希望以下代码仅打印“2”,而不打印“1”和“3”:
Block[{print = Print, Print}, Print[1]; print[2]; Print[3];]
实际上,上面的代码什么也不打印。
是否可以使 print
在此类代码中工作,同时完全阻止符号 Print
?
像这样的解决方案
With[{Print = f, print = Print}, Print[1]; print[2]; Print[3];]
并不合适,因为 Print
并未真正被阻止在此类代码中。
当思考禁用消息跟踪的方法时,出现了这个问题内部结构。
I wish to temporarily rename a built-in symbol and use it with different name while block the main name of this symbol. For example, I wish the following code to print only "2" but not "1" and "3":
Block[{print = Print, Print}, Print[1]; print[2]; Print[3];]
In really the above code prints nothing.
Is it possible to make print
working inside such code while completely block symbol Print
?
Solutions like
With[{Print = f, print = Print}, Print[1]; print[2]; Print[3];]
are not suitable since Print
is not really blocked inside such code.
The question appeared while thinking on a way to disable tracing of Message
internals.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这不是很干净,但我相信它是有用的。
如果不能接受在返回值中用
Null
替换该函数,则可能需要使用类似以下内容的内容:在 Block 后跟随一个
ReleaseHold
。或者:
然后在块后面加上:
/。 zz->函数
This is not very clean, but I believe it is serviceable.
If it is not acceptable to have the function replaced with
Null
in the return, you may need to use something like:Followed by a
ReleaseHold
after the Block.Or:
and then follow the Block with:
/. zz -> func