Smalltalk 这种语法pharos有什么问题?

Smalltalk 这种语法pharos有什么问题?,smalltalk,pharo,pharo-5,Smalltalk,Pharo,Pharo 5,我试图创建一个方法,该方法记录到服务器,获取它找到的json文件,然后选择每个元素中的4个,并将其发送到一个地址。当我在发送链接中只给出每种格式的一个已知数据,而不是一次选择每种格式的循环时,下面的代码似乎可以工作。我得到的错误是:smallInteger的实例不理解readStream。是什么导致了这个错误?我还可以如何使这些请求自动化 1到:4个do:[:每个| 每个 a:=ZnClient new。 a:我明白了https://MyServer/'. 一位校长:“引荐人”说:https:

我试图创建一个方法,该方法记录到服务器,获取它找到的json文件,然后选择每个元素中的4个,并将其发送到一个地址。当我在发送链接中只给出每种格式的一个已知数据,而不是一次选择每种格式的循环时,下面的代码似乎可以工作。我得到的错误是:smallInteger的实例不理解readStream。是什么导致了这个错误?我还可以如何使这些请求自动化

1到:4个do:[:每个| 每个 a:=ZnClient new。 a:我明白了https://MyServer/'. 一位校长:“引荐人”说:https://MyServer' ; 格式:'email'添加:'myEmail'; 格式:“密码”添加:“MyPass”。 职位。 a:我明白了https://MyServer/json'. 数据:=NeoJSONReader fromString:a内容。 列表:=每个位置的数据。 foo:=位于“num”的列表。 poo:=位于“名称”的列表。 a:我明白了https://MyServer/copy/",呸。 url:'https://MyServer/send/'. 格式:“添加”添加:“给定地址”; 格式:“nb_pic”添加:foo; 格式:“identf”添加:poo。 职位。
a:我明白了https://MyServer/json’]乍一看,语法没有问题。 但是看起来您没有获得您正在使用的框架的API:您发送get和post消息时,并不知道每次发送它们时它们实际上都会执行HTTPGET和HTTPPOST

所以,虽然它本身的语法是正确的,但非常不正确的是你正在做的事情,我不明白这是什么。看,这就是你的程序可以被理解的方式:

4 timesRepeat: [
    "this will do a post" 
    ZnClient new
        url: 'https://MyServer/';
        headerAt: 'referer' put: 'https://MyServer';
        formAt: 'email' add: 'myEmail';
        formAt: 'password' add: 'MyPass';
        post.

    "this is a simple get"
    a := ZnClient get: 'https://MyServer/json'.
    data := NeoJSONReader fromString: a contents.
    list := data at:each.
    foo := list at:'num'.
    poo := list at:'name'.

    "this is another get that I don't know what's doing here"
    a := ZnClient get: 'https://MyServer/copy/', poo.

    "this is another post"
    a := ZnClient 
        url: 'https://MyServer/send/';
        formAt: 'add' add: 'given address';
        formAt: 'nb_pic' add:foo;
        formAt: 'identf' add: poo;
        post.

    "and finally, this is another get"
    ZnClient get: 'https://MyServer/json' ]

很明显,这段代码并没有达到您希望的效果:

多亏了@Carlo提示,我发现错误消息:smallInteger的实例不理解readStream是由于从poo和foo收集的值造成的

列表:=每个位置的数据。 foo:=位于“num”的列表。这里是整数 poo:=位于“name”的列表。这里有一个byteString 事实上,表单操作需要一个键和值,如图所示,但是该值必须是一个字符串,我只是通过替换poo和foo来添加:

    formAt: 'nb_pic' add:foo;
    formAt: 'identf' add: poo;

因此,我需要将foo和poo转换为字符串,现在它运行良好。谢谢

亲爱的@EstebanLM最后一次获取是必须发送文件的表单操作。基本上,您可以收集文件,然后使用方法post将其附加到操作表单中以进行发送。就像前面提到的,当我引入选择每个文件的循环时,获取最后一篇文章的foo和poo值,它会给出错误,而直接为文章表单提供值时,该值工作正常。Pharo环境没有告诉您哪一行是罪魁祸首吗?您是否检查了弹出的调试窗口?还是你在使用GNU Smalltalk?现在还不清楚,因为您已经标记了两者。您执行了哪些调试步骤来缩小范围?我假设格式为:“nb_pic”add:foo;是罪魁祸首行,因为foo可能是一个整数。您可以单步执行代码或使用调试器查明问题…@Carlo,foo实际上是一个整数,表示格式的值:“nb_pic”。在表单操作中,它需要一个数字。当我在不使用循环和数据的情况下为每种格式提供一个已知值时,它会工作,但当我包含包含数据的部分时,它会发送错误。Pharo会在错误窗口中为您提供一个相当详细的跟踪,当您单击该窗口中的每个项目时,该方法调用中的所有参数和变量。你应该能够得到更多的细节,而不仅仅是当我包括数据的一部分,以便便它发送的错误,这应该有助于你。