所以我现在已经使用Smalltalk大约6个月了(Squeak和Pharo),主要是做数据分析,我即将开始我的第一个Seaside应用程序.所以你向所有Smalltalkers提出的问题是,你最喜欢的持久性解决方案是什么?我一直在看Magma,GOODS和GLORP.我是一个长期的python黑客,所以我得到ORM,但似乎Magma或GOODS将是一个更好的解决方案,因为它们看起来像面向对象.
快速说明:我想在多个VM上扩展我的应用程序,因此只需将数据保存到图像就不会真正起作用.
谢谢!
Ruby中的块是什么意思?它与Smalltalk看起来类似,但您无法向其发送消息.
例如,在smalltalk中:
[:x | x + 3] value: 3
Run Code Online (Sandbox Code Playgroud)
返回6.但是在红宝石中:
{|x| x + 3}.call 3
Run Code Online (Sandbox Code Playgroud)
将导致SyntaxError.
好吧,你可以在ruby中将消息传递给lambda:
irb(main):025:0> ->(x){x+3}.call 3
=> 6
Run Code Online (Sandbox Code Playgroud)
所以在Ruby中,块不是一个块,但lambda是一个块?这是真的?我的意思是,红宝石lambda和smalltalk块之间有什么区别吗?如果这是真的,那么什么是红宝石块呢?
更新:
从下面的评论和答案,以及一些谷歌搜索,我想我对Ruby块有了更多的了解.在Ruby中,通常一段代码会计算一个值,而每个值都是一个对象.但是,块不会评估值.所以这不是一个对象.相反,它可以作为对象的一部分.例如,在{| x |中 x + 3}可以作为对象proc {| x |的一部分 x + 3}.
但它确实让我困惑.在smalltalk中,几乎每个表达式都可以分为对象(绑定到变量是例外).在Ruby中似乎有更多例外.
Objective-C是否支持阻止"a la Smalltalk"?
在Smalltalk中,块类似于其他语言中的"闭包"或"lambda表达式"或"无名函数".
最近对Smalltalk的介绍启发了我对'纯'面向对象风格的应用和好处.我想以前看过的这红宝石的好处,尽管非对象的存在的取向if,unless等结构好像它没有通过随身携带的东西一路.
纯粹在这里,我说的是"一切都是对象"(包括通过块或类似的功能)和没有程序风格的流控制,而是在布尔和集合上使用流控制方法.
然而,即使在像Smalltalk这样的语言中,有些东西也很突出,因为它们不是面向对象的.例如,如果不使用特殊语法(:=而不是'is:'或类似方法)进行变量赋值似乎不可能,并且从函数返回值似乎需要^运算符,它似乎不属于对任何物体.
有没有更进一步的语言?
我正在尝试学习Smalltalk,所以我正在做"Squeak by Example"教程.我必须在系统浏览器中编写一个方法,其中一个垂直箭头指向代码的开头.是否有Unicode标志或类似的东西,我可以在Windows中使用?
在此先感谢(我知道,这是一个非常简单的问题,但我没有得到线索)!:)
我安装了Pharo 1.4并尝试阅读"Pharo by example".
不幸的是,这本书和Pharo图像完全不同步:菜单不同; 用作例子的类不存在例如; BouncingAtomsMorph类.
很可惜.也许应该使用特定的Pharo版本来学习,另一个应该使用最新版本...任何人都可以帮忙吗?
我有兴趣开发一款多人游戏,Pharo Smalltalk作为服务器后端,以及用于Web客户端前端的琥珀色smalltalk + html5游戏库.
Pharo smalltalk有websocket支持,我已经尝试用它制作游戏.它工作正常,但我宁愿使用其中一种推送服务,以便我可以轻松扩展到许多用户.
我需要的是(我认为)是一个websocket接口(从我的后端服务器)到其中一个推送服务.我会使用firebase REST api,但似乎有点奇怪,我不得不恢复到从我的服务器到firebase服务器不断轮询,而不是简单地通过websocket订阅他们的服务并获得更新而不进行轮询.
我注意到其中许多服务都有socket.io实现,因此您可以通过socket.io将后端服务器连接到它们.不幸的是,pharo smalltalk没有实现socket.io,也没有办法使用我所知道的.
如果我找不到解决方案继续在服务器后端使用其中一个推送服务使用pharo smalltalk,我将研究另一种可能性,即负载平衡我的pharo smalltalk图像和后端服务器.
昨天我花了大约2个小时来处理我的Pharo图像,当我不小心写了一些代码并执行它导致了一个无限循环 - 实际上,我从另一个方法调用一个方法,然后又调用原始方法,返回永远.pharo图像没有响应.我重新启动了图像,并在那两个小时内丢失了所有工作!
我在线查看,我可以点击alt- .进入某种过程查看器?我怎么能从那里杀死无限循环?
在Smalltalk中有方法ifNotNilDo:
它使用如下:
database getUser ifNotNilDo: [:user | Mail sendTo: user ]
Run Code Online (Sandbox Code Playgroud)
在不nil执行块的对象上执行,将对象本身作为参数传递.类中的实现UndefinedObject(Smalltalk相当于Ruby的NilClass)实际上什么都不做.这样,如果让用户得到一个nil对象,就什么都不会发生.
我不知道Ruby有类似的东西,所以我推出了自己的解决方案.它是这样的:
class Object
def not_nil
yield(self)
end
end
class NilClass
def not_nil
# do nothing
end
end
Run Code Online (Sandbox Code Playgroud)
它可以像这样使用:
users = {:peter => "peter@peter.com", :roger => "roger@roger.com" }
users[:roger].not_nil {|u| Mail.send(u) }
Run Code Online (Sandbox Code Playgroud)
这使我们无法访问哈希两次
Mail.send(users[:roger]) if users[:roger]
Run Code Online (Sandbox Code Playgroud)
...或使用临时变量:
u = users[:roger]
Mail.send(u) if u
Run Code Online (Sandbox Code Playgroud)
人们开始建议基于哈希操作的解决方案,并且还要两次访问哈希.我的问题不是直接与哈希相关.
想象一下,第一个操作不是哈希访问,也很昂贵.喜欢:
RemoteUserRepo.find_user(:roger).not_nil {|u| Mail.send(u) }
Run Code Online (Sandbox Code Playgroud)
(结束更新)
我的问题是:
我已经有一段时间涉足Seaside,而且,想要再次为一个小项目玩它,我下载了Pharo的一键式图像,并认为我会查看文档来了解我的方向.(有一个相关的问题是关于其中两个之间的性能差异,一个关于哪些可以服务器静态文件,但都没有解释所有这些之间的差异.)
A Walk on the Seaside的第一张图片显示了"海边控制面板"中的两个可用服务器:WASwazooAdaptor和WAComancheAdaptor.在对菲罗海滨下载页说,你可以启动或者Zinc,Kom或Swazoo作为Web服务器,并且它们中的任可从海边控制面板的适配器.然而,在我刚下载的形象,面板只有WATestServerAdaptor,ZnZincServerAdaptor,ZnZincStaticServerAdaptor,和ZnZincStreamingServerAdaptor.其中第二个是默认情况下唯一可用的.
我从所有这些相互矛盾的信息中得知,锌是最新的,至少在Pharo上使用 - 这是正确的吗?其他的都过时了吗?或者他们各自都有自己的优点和缺点,需要添加到图像中(例如通过蒙蒂塞洛)?Kom和Swazoo仅适用于Squeak吗?我何时会在Pharo上使用三种不同的Zinc服务器?我希望有人能解决我的困惑.