在探讨问题时,我最近assert在Java中发现了关键字.起初,我很兴奋.我还不知道有用的东西!一种更有效的方法来检查输入参数的有效性!耶老师!
但后来我仔细研究了一下,我的热情并没有像一个简单的事实那样"完全被扼杀"而"温和":你可以关闭断言.*
这听起来像是一场噩梦.如果我断言我不希望代码继续输入,如果输入listOfStuff是null,为什么我想要忽略该断言?听起来好像我正在调试一段生产代码,并怀疑listOfStuff可能错误地传递了一个,null但没有看到任何触发该断言的日志文件证据,我不相信listOfStuff实际上已经发送了一个有效值; 我还必须考虑断言可能完全被关闭的可能性.
这假设我是调试代码的人.不熟悉断言的人可能会看到并且(非常合理地)假设如果断言消息没有出现在日志中,则不会出现listOfStuff问题.如果你的第一次遭遇assert是在野外,你甚至会发现它可以完全关闭吗?毕竟,它不像是一个允许你禁用try/catch块的命令行选项.
所有这些都让我想到了我的问题(这是一个问题,而不是一个咆哮的借口!我保证!):
我错过了什么?
是否有一些细微差别使得Java的实现assert比我给它的功劳更有用?在某些情况下,从命令行启用/禁用它的能力实际上是非常有价值的吗?当我设想在生产代码中使用它代替语句时,我是否误解了它if (listOfStuff == null) barf();?
我觉得这里有一些重要的东西,我没有得到.
*好的,从技术上讲,它们实际上是默认关闭的; 你必须不遗余力地打开它们.但是,你仍然可以完全击败他们.
这assert首先是一个调试工具的概念需要很长的路要走,才能使它对我有意义.
我仍然认为应该在生产环境中禁用输入检查非平凡私有方法的概念,因为开发人员认为不可能输入错误.根据我的经验,成熟的生产代码是一种疯狂的,庞大的东西,多年来由具有不同技能的人们开发,其目标是快速变化的不同程度的理智要求.即使糟糕的输入确实是不可能的,从现在起六个月后的一段邋maintenance维护编码也可以改变这一点. 提供的链接gustafc(谢谢!)包括这个例子:
assert interval > 0 && interval <= 1000/MAX_REFRESH_RATE : interval;
禁用如此简单的生产检查让我感到愚蠢乐观.然而,这是编码哲学的差异,而不是破碎的特征.
另外,我绝对可以看到这样的价值:
assert reallyExpensiveSanityCheck(someObject) : someObject;
感谢所有花时间帮助我理解这个功能的人; 这是非常赞赏.
C++中的这种语法是什么?有人能指出我的技术术语,所以我可以看到我的文字中是否有任何内容?
起初我以为它是一个原型,然后把=它(*fn)扔掉......
这是我的例子:
void (*fn) (int&,int&) = x;
Run Code Online (Sandbox Code Playgroud) 我知道这有效:
proc = Proc.new do
puts self.hi + ' world'
end
class Usa
def hi
"Hello!"
end
end
Usa.new.instance_eval &proc
Run Code Online (Sandbox Code Playgroud)
但是我想将参数传递给proc,所以我试过这个不起作用:
proc = Proc.new do |greeting|
puts self.hi + greeting
end
class Usa
def hi
"Hello!"
end
end
Usa.new.instance_eval &proc, 'world' # does not work
Usa.new.instance_eval &proc('world') # does not work
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助我使它工作吗?
Microsoft .NET Framework 4.0完整安装程序(32位和64位)为48.1 MB,客户端配置文件安装程序为41.0 MB.解压缩的安装文件分别为237 MB和194 MB,一旦安装,它们分别为537 MB和427 MB.
这是110 MB的差异.两个包之间有什么区别?
什么时候安装客户端配置文件而不是完整的.NET Framework?
我正在开发一款我希望在iPhone和iPad上普及的新应用.我开始使用"创建基于窗口的应用程序"向导,它在"iPhone"和"iPad"组中创建了单独的应用程序代理.由于我已经非常熟悉iPhone开发,我做了我项目的那部分,现在我已经准备好做一些iPad的东西了.
所以...我开始通过向我的iPad委托添加UISplitViewController,将Active SDK切换到3.2,它的工作原理!但是当我切换回3.1.3并尝试在模拟器中运行它时,Build and Go失败了.对于初学者,我看到:
... path .../iPad/AppDelegate_Pad.h:13:错误:'UISplitViewController'之前的预期说明符限定符列表
我的Base SDK设置为3.2,部署目标设置为3.1.3.我觉得这就够了.但我也在文档中找到了有条件地编译的方法:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
MyIPadViewController* vc;
// Create the iPad view controller
#else
MyIPhoneViewController* vc;
// Create the iPhone view controller
#endif
Run Code Online (Sandbox Code Playgroud)
所以我到处都需要这样做吗?这似乎是一个可怕的很多代码来添加(我会得到在短时间内摆脱了4.0反正),所以我觉得我必须做一些错误的.而且,我甚至不知道它如何适用于@property或@synthesize声明之类的东西.
tl;博士问题的版本 - 我错过了某个地方的设置吗?
我有一个程序依赖于它希望在目录结构内部找到的共享库.我想将该共享库移到更好的位置.在OS X上,可以使用install_name_tool完成此操作.我无法找到Linux的等价物.
作为参考,readelf -d myprogram吐出以下释义输出:
Dynamic section at offset 0x1e9ed4 contains 30 entries:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [this/is/terrible/library.so]
0x00000001 (NEEDED) Shared library: [libGL.so.1]
0x00000001 (NEEDED) Shared library: [libGLU.so.1]
0x00000001 (NEEDED) Shared library: [libstdc++.so.6]
(continues in an uninteresting fashion)
Run Code Online (Sandbox Code Playgroud)
(并根据要求,ldd myprogram:)
linux-gate.so.1 => (0x0056a000)
this/is/terrible/library.so => not found
libGL.so.1 => /usr/lib/mesa/libGL.so.1 (0x0017d000)
libGLU.so.1 => /usr/lib/libGLU.so.1 (0x00a9c000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00710000)
(etc, etc)
Run Code Online (Sandbox Code Playgroud)
我想将"this/is/terrible/library.so"改为"shared/library.so".请注意,如果程序保留在其"构建"位置,其中/// ter//.实际存在的相对路径,则ldd能够找到它,正如您所期望的那样.
我知道RPATH并不是我想要的,我不需要在全球范围内改变搜索路径.
在我的代码中,Java TreeSet迭代是主要的时间因素.在查看系统时,我认为它是O(n)复杂性.任何人都可以验证吗?
我想通过提供从子节点到父节点的向后链接,我可以提高性能.
我想知道你用什么来描绘C/C++中不同实体之间的关系.这可能是一个非常广泛的问题,因此我将尝试更多地澄清我的问题并举例说明.
作为用户,我正在寻找一些简单的东西,让我以非正式的方式轻松地绘制容器,指针等.目的是记录一些结构关系,将它们传递给初级开发人员.看一下图纸应该加速对代码的理解.
我此时的解决方案是使用:
1)纸和铅笔.2)Microsoft PowerPoint/Word Autoshapes.3)免费软件.
其他可能是:
4)Microsoft Visio,但我的公司没有许可证.5)UML工具.我不想这样走.这就是我所说的更正式的解决方案.我知道像Rational Rose这样的工具是xxx,我尝试过boUML和紫罗兰,它们在某些部分很好,但我更喜欢选项1),2)或3)的灵活性.
最后,让我写下一个更具体的例子:
让我说我要绘制一个包含另一个地图作为映射值的地图,并且该结果包含一个结构作为映射值,它包含一个类型的指针向量和一个指向其他类型的指针.此外,还存在其他结构,这些结构保存指向前一个映射所指向的对象的指针,因此存在从不同位置指向的对象.
这只是我的一个例子,但你可以轻松地从你体验到一个.
您将使用什么来描绘此示例或您处理的其他类似示例?
最好的问候,托马斯.
我有两个表需要加入...我想在'id'上加入table1和table2 - 但是在表2中,id不是唯一的.我只希望为表2返回一个值,并且此值表示在指定日期范围(比如一个月)内名为"total_sold"的列的总和,但是我同时想要多个日期范围...
SELECT ta.id, sum(tb.total_sold) as total_sold_this_week, sum(tc.total_sold) as total_sold_this_month
FROM table_a as ta
LEFT JOIN table_b as tb ON ta.id=tb.id AND tb.date_sold BETWEEN ADDDATE(NOW(),INTERVAL -1 WEEK) AND NOW()
LEFT JOIN table_b as tc ON ta.id=tc.id AND tc.date_sold BETWEEN ADDDATE(NOW(),INTERVAL -1 MONTH) AND NOW()
GROUP BY ta.id
Run Code Online (Sandbox Code Playgroud)
这可行,但不会对行进行求和 - 只为每个id返回一行...如何从表b中获取总和而不是只有一行?请批评问题的格式是否可以使用更多的工作 - 如果需要,我可以重写并提供样本数据 - 这是一个更大问题的平凡版本.
-谢谢
有没有一种方法以编程方式获取的路径,数据库/文件的应用程序使用,而不是硬编码"数据/数据/ mypackage.com/database.db"?