错误、漏洞、问题 - 页 1439 1...143214331434143514361437143814391440144114421443144414451446...3184 新评论 Alexander Puzanov 2015.11.25 19:31 #14381 George Merts:根据我的经验,如果程序员在一个包含10个项目、索引为20的数组中写了什么,这很可能意味着他/她犯了一个错误,程序应该产生一个错误,而不是增加数组的大小,从而隐藏一个有问题的动作。 所有这些 "调整大小的数组 "在隐藏潜在错误方面要比便利性麻烦得多。更重要的是,不需要跟踪数组的大小也是一种潜在的危险做法,会导致难以修复的错误。 是我,还是你没有使用过相关的语言?你根本不需要指定要添加的索引:它被自动分配,而且数组的大小也会增加。在这个操作过程中,程序员就是没有机会在索引上犯错。你可以用类来实现类似的行为,添加相关的函数pop、shift、unshift等等。并从代码中拖出一马车的类,每个代码都使用其中的%10...20个函数。这听起来像是一个好的解决方案吗?在我看来,正确解决方案的一个例子是在ObjectsDeleteAll函数 中加入按前缀删除的功能--这是向更高级别的编程迈进的另一个微米--而大多数编码员都飞到了回收站,所以自制了这个功能。唉,我们几乎看不到阵列的这种情况......。 Ilya Malev 2015.11.25 19:48 #14382 И таскать телегу классов из кода в код, при том что в каждом коде из неё используются %10..20 функций. 你没听说过include mqh文件吗? coderex 2015.11.26 01:56 #14383 不需要编写 "智能数组 "类,它们已经在MetaQuotes标准库 中了,请看Arry类家族。 Demal 2015.11.26 03:44 #14384 你好。我想用MT5通过经纪人 "Otkritie "进行期货工作。当访问SymbolInfoTick函数 时,结果发现MqlTick结构的最后两个参数- time_msc, flag都没有。有可能解决这个问题吗?例如,以本网站的MT5为例。尝试将其连接到经纪人的服务器。或者可以通过其他方式获得所需信息。我很感兴趣:谁发起的交易,卖方还是买方? Georgiy Merts 2015.11.26 05:12 #14385 Alexander Puzanov:是我的问题,还是你没有使用过有关的语言?你根本不需要为添加的元素指定索引,它被自动分配,而且数组的大小也会增加。在这个操作过程中,程序员就没有机会在索引上犯错。Awwwww...程序员有什么机会犯错?你认为你可以考虑到任何复杂程序的所有变体是错误的。 所有这些 "默认动作 "必须是复杂对象的属性。简单对象,如变量、数组和简单结构--必须有尽可能少的 "默认 "属性。 例如,在创建时 - 它们必须存储一个未定义的值,而不是零。 你可以用类来实现类似的行为,添加相关的函数pop、shift、unshift等。并从代码中拖出一马车的类,每个代码都使用其中的%10...20个函数。这听起来像是正确的解决方案吗? 从逻辑上讲,这是正确的解决方案。在处理这类问题时--他们的行为是透明的。 那么 "拖动一车的类 "呢--在编码时,你不拖动它们,你只是插入库中。而在编译时,一个正常的链接器不应该把库中的所有方法都放到可执行文件中,而应该是那些被使用的方法。 在我看来,正确的解决方案的例子--在ObjectsDeleteAll函数 中加入前缀删除--这是迈向更高级别的编程的另一个微米--大多数编码员已经飞到了垃圾桶里,这个自制的函数。唉,这不太可能发生在数组上......。在我看来,这也是一个错误的方法,原因是一样的。该功能被加载了一些不典型的任务,不符合其应用的逻辑。 在我看来,正确的解决方案是在图上有一个类对象管理器,保持一个列表,并在函数被调用时删除必要的对象。在我看来,名称的前缀应该仅仅是为了让人清楚地了解对象的一些信息。而删除--不应该以任何方式基于对象的名称,而是将该名称保存在一个数组中。 Vladimir Karputov 2015.11.26 05:33 #14386 Demal:你好。我试图使用MT5通过经纪人 "Otkritie "进行期货工作。当访问SymbolInfoTick函数 时,结果发现MqlTick结构的最后两个参数- time_msc, flag都没有。有可能解决这个问题吗?例如,以本网站的MT5为例。尝试将其连接到经纪人的服务器。或者可以通过其他方式获得所需信息。我很感兴趣:谁发起的交易,卖方还是买方?你现在的终端是什么版本的?你是连接到一个演示的还是真实的服务器? Demal 2015.11.26 05:42 #14387 版本5.0 build 1150,演示 Vladimir Karputov 2015.11.26 06:48 #14388 Demal: 版本5.0 build 1150,演示更新你的终端(你需要连接到MetaQuotes-Demo服务器)。目前的建设。Terminal MetaTrader 5 build 1210 started (MetaQuotes Software Corp.)这就是剧本。//+------------------------------------------------------------------+ //| Test.mq5 | //| Copyright © 2015, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2015, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.00" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { MqlTick last_tick; //--- if(SymbolInfoTick(Symbol(),last_tick)) { Print("time = ",last_tick.time,"; bid = ",last_tick.bid, "; ask = ",last_tick.ask,"; volume = ",last_tick.volume, "; time_msc = ",last_tick.time_msc,"; flag = ",last_tick.flags); } else Print("SymbolInfoTick() failed, error = ",GetLastError()); } //+------------------------------------------------------------------+ 得到了这个结果。Test (RTS-12.15,H1) time = 2015.11.26 09:42:57; bid = 88360.0; ask = 88400.0; volume = 2; time_msc = 1448530977000; flag = 0 附加的文件: Test.mq5 2 kb Demal 2015.11.26 07:44 #14389 Karputov Vladimir:更新你的终端(你需要连接到MetaQuotes-Demo服务器)。目前的建设。这就是剧本。得到了这个结果。 谢谢你,你知道为什么这个标志的值是0,好像什么都没有改变? Vladimir Karputov 2015.11.26 07:55 #14390 Demal: 谢谢,你知道为什么标志的值是0,好像什么都没有改变。 使用CopyTicks,你会很高兴。而且SymbolInfoTick 可能还不知道如何与新的tick结构一起工作。 附加的文件: CopyTicks.mq5 4 kb 1...143214331434143514361437143814391440144114421443144414451446...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
根据我的经验,如果程序员在一个包含10个项目、索引为20的数组中写了什么,这很可能意味着他/她犯了一个错误,程序应该产生一个错误,而不是增加数组的大小,从而隐藏一个有问题的动作。
所有这些 "调整大小的数组 "在隐藏潜在错误方面要比便利性麻烦得多。更重要的是,不需要跟踪数组的大小也是一种潜在的危险做法,会导致难以修复的错误。
是我,还是你没有使用过相关的语言?你根本不需要指定要添加的索引:它被自动分配,而且数组的大小也会增加。在这个操作过程中,程序员就是没有机会在索引上犯错。
你可以用类来实现类似的行为,添加相关的函数pop、shift、unshift等等。并从代码中拖出一马车的类,每个代码都使用其中的%10...20个函数。这听起来像是一个好的解决方案吗?在我看来,正确解决方案的一个例子是在ObjectsDeleteAll函数 中加入按前缀删除的功能--这是向更高级别的编程迈进的另一个微米--而大多数编码员都飞到了回收站,所以自制了这个功能。唉,我们几乎看不到阵列的这种情况......。
И таскать телегу классов из кода в код, при том что в каждом коде из неё используются %10..20 функций.
不需要编写 "智能数组 "类,它们已经在MetaQuotes标准库 中了,请看Arry类家族。
是我的问题,还是你没有使用过有关的语言?你根本不需要为添加的元素指定索引,它被自动分配,而且数组的大小也会增加。在这个操作过程中,程序员就没有机会在索引上犯错。
Awwwww...程序员有什么机会犯错?你认为你可以考虑到任何复杂程序的所有变体是错误的。
所有这些 "默认动作 "必须是复杂对象的属性。简单对象,如变量、数组和简单结构--必须有尽可能少的 "默认 "属性。
例如,在创建时 - 它们必须存储一个未定义的值,而不是零。
你可以用类来实现类似的行为,添加相关的函数pop、shift、unshift等。并从代码中拖出一马车的类,每个代码都使用其中的%10...20个函数。这听起来像是正确的解决方案吗?
从逻辑上讲,这是正确的解决方案。在处理这类问题时--他们的行为是透明的。
那么 "拖动一车的类 "呢--在编码时,你不拖动它们,你只是插入库中。而在编译时,一个正常的链接器不应该把库中的所有方法都放到可执行文件中,而应该是那些被使用的方法。
在我看来,正确的解决方案的例子--在ObjectsDeleteAll函数 中加入前缀删除--这是迈向更高级别的编程的另一个微米--大多数编码员已经飞到了垃圾桶里,这个自制的函数。唉,这不太可能发生在数组上......。
在我看来,这也是一个错误的方法,原因是一样的。该功能被加载了一些不典型的任务,不符合其应用的逻辑。
在我看来,正确的解决方案是在图上有一个类对象管理器,保持一个列表,并在函数被调用时删除必要的对象。在我看来,名称的前缀应该仅仅是为了让人清楚地了解对象的一些信息。而删除--不应该以任何方式基于对象的名称,而是将该名称保存在一个数组中。
版本5.0 build 1150,演示
更新你的终端(你需要连接到MetaQuotes-Demo服务器)。目前的建设。
这就是剧本。
得到了这个结果。
更新你的终端(你需要连接到MetaQuotes-Demo服务器)。目前的建设。
这就是剧本。
得到了这个结果。
谢谢,你知道为什么标志的值是0,好像什么都没有改变。