我从2004年发现了一篇(可能已过时且不正确)的博客文章,声称无法从命令行运行Smalltalk脚本.从那时起有什么变化,是否可以从命令行运行Smalltalk脚本?我已经做了很多谷歌搜索,我根本没有找到关于这个主题的信息.
有没有办法将Smalltalk脚本(例如这个)保存为文件,然后从命令行运行脚本?
Transcript show: 'This should be printed to the standard output.' printString; cr.
Run Code Online (Sandbox Code Playgroud) 我注意到Smalltalk语言没有私有/受保护方法的概念.所有方法都是公开的.来自Java/C++背景,我认为这是语言的一个基本弱点,因为在Smalltalk中创建的任何应用程序都将完全开放于操作.我猜你可以依靠命名约定来记录公共API和前缀方法,以指示它们是私有的(我相信Squeak会这样做),但它仍然是完全开放的.
这种方法比使用显式访问修饰符来控制对方法调用的访问有什么好处吗?
这样的事情存在吗?
红宝石:
if __FILE__ == $0
main
end
Run Code Online (Sandbox Code Playgroud)
Perl的:
unless(caller) {
main;
}
Run Code Online (Sandbox Code Playgroud)
LUA:
if type(package.loaded[(...)]) ~= "userdata" then
main(arg)
else
module(..., package.seeall)
end
Run Code Online (Sandbox Code Playgroud) 每当我开始学习语言时,我做的第一件事就是生成一个用该语言编写的可执行文件(可能是一个已编译的程序或一个脚本),当运行打印'hello,world'和stdout的换行符时:
theironknuckle@beastbook:~/Code$ ./hello
hello, world
Run Code Online (Sandbox Code Playgroud)
在使用GNU Smalltalk大约一个小时后,我还没有发现如何做到这一点.
(我知道你好世界节目可以在会话中表达为
'hello, world' printNl
Run Code Online (Sandbox Code Playgroud)
这不符合我的标准要求)
据我所知,Smalltalk没有主线.所以我非常感兴趣的是可能需要什么类型的样板来实现它.同样,该文件不一定必须编译,但练习的最终结果必须是导致上述会话提取的smalltalk代码.
PS.yesyesyes 我知道我没有接受"基于图像的编程"哲学,这是错误的.我不在乎.我并不反对学习如何使用图像和IDE以及所有这些,但我现在对它的兴趣微乎其微.我关心的是Smalltalk语言本身.在语法上,哲学上和印刷上它是相当美丽的.从命令行解释器和文本编辑器学习编程语言我感到很自在.:)
我是Smalltalk的新手.我想我理解语言的基础知识,现在想从GNU Smalltalk开始(因为它是免费的并且具有GTK的绑定).
由于我来自PHP和Java-Corner,我不熟悉Smalltalk图像的概念.我现在甚至读过,你不需要在GNU Smalltalk中使用图像.现在我很困惑;-)
那么是否可以使用文件并在PackageLoader类中包含我需要的类?
当我可以使用我最喜欢的短信(vim)编码代替IDE时,我会很高兴;-)
请点缀我:-)
鉴于任何Smalltalk风格,我应该如何检查是否支持Unicode?如果没有支持,我如何检测缺少哪个级别(VM,字体,转换器等)?
在GNU Smalltalk手册中,它写道:
Unlike other Smalltalks, method statements are inside brackets.
Run Code Online (Sandbox Code Playgroud)
所以我想知道,为什么会出现与Smalltalk-80这样的任意偏差?
如果给定的方法(例如:使用#aMethod传递)属于给定的类(或其层次结构),是否存在将使用布尔值回答的smalltalk消息?
我想说一些像 -
(self containsMethod:#aMethod) ifFalse:[...blah blah].
Run Code Online (Sandbox Code Playgroud)
显然,containsMethod:是我希望存在的一些消息的占位符.哦,这个例子中的self的超类是Object.谢谢!
在GNU Smalltalk 80中,可以在您自己选择的纯文本编辑器中编写smalltalk代码.
因此,调试代码非常重要.
首先将文件保存为txt文件.然后使用"工具"从程序员文本编辑器中打开该文件.这里的工具 - 链接C/program/GNU/gnu smalltalk/gst.exe.代码正在运行.调试选项不包括在内.在这些情况下,编程是不可能的.必须有一个"调试"选项才能激活.
我的问题是:如何包含调试选项?通常,首先调试smalltalk代码.
我目前正在尝试获取以下形式的 3 行特定输入:
XX.XX(浮点) XX(1-3 位整数) XX(1-3 位整数)
以下是我当前的代码:
inputStringOne := stdin nextLine.
mealCost := inputStringOne.
Transcript show: inputStringOne; cr .
inputStringTwo := stdin nextLine.
tipPercent := inputStringTwo.
Transcript show: inputStringTwo; cr .
inputString := stdin nextLine.
taxPercent := inputString .
mealCost inspect .
tipPercent inspect .
taxPercent inspect .
Run Code Online (Sandbox Code Playgroud)
我已经在这方面进行了 3-4 个小时的编程、搜索互联网等。我是一个自学 Smalltalk 的超级初学者,所以我试图找出为什么 nextLine 不能正确读取输入。以下是输入到 stdin 的示例输入,以及Transcript 显示和检查的结果:
标准输入上的示例输入:
10.25
17
5
Run Code Online (Sandbox Code Playgroud)
标准输出上的输出:
10.25
.25
An instance of String
contents: [
[1]: $1
[2]: …Run Code Online (Sandbox Code Playgroud) gnu-smalltalk ×10
smalltalk ×10
coding-style ×1
compilation ×1
debugging ×1
gnu ×1
inheritance ×1
io ×1
methods ×1
pharo ×1
squeak ×1
stdout ×1
unicode ×1
visualworks ×1