我只是想知道@string在实际的Java代码中使用而不是硬编码字符串的好处/开销是什么...例如:
// To get the string resource:
getActivity.setTitle(getString(R.string.my_string));
Run Code Online (Sandbox Code Playgroud)
这是Actionbar标题,动态创建按钮文本等内容的最佳实践......或者我应该这样做:
// Hardcoded string
getActivity.setTitle("My String");
Run Code Online (Sandbox Code Playgroud)
我知道第一种方式会有更多的开销.只是不确定最佳实践是什么.
Android中是否存在各种资源类型的常量(即:"drawable")?
我想基于getResourceTypeName的返回值编写一些条件逻辑,我宁愿避免硬编码资源类型.
例:
final String type = context.getResources().getResourceTypeName(resid);
if ("drawable".equalsIgnoreCase(type)) {
// Something
} else if ("xml".equalsIgnoreCase(type)) {
// Something else
}
// TODO: Replace above strings with system constants
Run Code Online (Sandbox Code Playgroud)
(显然,我可以创建自己的常量,但我更喜欢使用系统常量来确保向上兼容性)
我有一个关于硬编码网址的查询。当使用jquery从JavaScript进行发布时,我这样做 $.post('http://localhost:8000/timer/check/'
现在,这在我的开发服务器上可以正常工作。当我必须将其部署在另一台服务器上时,我必须手动更改代码中的所有url。那么如何避免对URL进行硬编码?
我正在针对 Windows 进行交叉编译gettext-0.18.2,但遇到了一些问题。在共享库之一的链接阶段,libtool出现以下错误消息:
/bin/bash ../libtool --tag=CXX ...
libtool: link: unsupported hardcode properties
libtool: link: See the libtool documentation for more information.
libtool: link: Fatal configuration error.
Run Code Online (Sandbox Code Playgroud)
您可以在此处libtool查看包括命令的完整构建日志(错误位于页面的最底部)。
什么会导致此错误?它意味着什么?尽管错误消息中有声明,但我似乎在文档中找不到有关此错误的任何信息。
另外值得注意的是:真正让这件事变得奇怪的是,在 Ubuntu 12.10 (Quantal) 上构建成功,没有错误……但在当前的 LTS 版本 Ubuntu 12.04 上却失败了。
附加:libtool我对成功的构建和失败的构建之间的调用行进行了比较。差异看起来像这样:

显然命令中省略了 C++ 编译器。这会导致上述错误吗?
我正在编写一个Python模块,我希望许多函数能够访问元素周期表中的信息; 即原子序数及其相应的原子符号.信息永远不会改变.我正在努力实现这个目标.
散列与元组:散列可以提供非常方便的查找,但可以轻松更改.一个元组至少是不可改变的.
变量与类:我一直试图在可能的情况下将类中的所有内容保存在类中,但我不确定这里是否有意义,因为应该只有一个元素周期表.一个事实来源.
也许我完全错过了一些东西.我从来没有见过有人在我看过的Python项目中对这么多信息进行硬编码.指导将非常感激.
例如,我想使用数组SQRT [i]创建一个平方根表来优化游戏,但我不知道在访问SQRT [i]的值时,以下初始化之间是否存在性能差异:
硬编码阵列
int SQRT[]={0,1,1,1,2,2,2,2,2,3,3,.......255,255,255}
Run Code Online (Sandbox Code Playgroud)在运行时生成值
int SQRT[65536];
int main(){
for(int i=0;i<65536;i++){
SQRT[i]=sqrt(i);
}
//other code
return 0;
}
Run Code Online (Sandbox Code Playgroud)访问它们的一些示例:
if(SQRT[a*a+b*b]>something)
...
Run Code Online (Sandbox Code Playgroud)
我不清楚程序是否以不同的方式存储或访问硬代码阵列,我也不知道编译器是否会优化硬代码阵列以加快访问时间,它们之间是否存在性能差异访问阵列时?
例如:
InitEmployee()
{
vector<Employee> employeeList = {
Employee("Clark Kent",0),
Employee("Bruce Wayne",1),
...
Employee("Hal Jordan",65535)
}
}
Run Code Online (Sandbox Code Playgroud)
我无法从文件或数据库查询,因为此程序需要在单个可执行文件中,因此所有常量数据必须是硬编码的.我实际上使用boost的multi_index_container按名称和id进行快速查找但是为了简单起见,我在这里使用了vector作为示例.问题是我在单个函数中没有那么多(2 ^ 16)个常量数据而没有堆栈溢出.有没有更好的方法来初始化这个列表而不拆分功能?
我正在使用VC12.谢谢!
更新
见选择的答案.正如其他人所提到的,使用static会强制它继续数据而不是堆栈.这就是我最终得到的结果:
InitEmployee()
{
static Employee employeeList[] = {
{"Clark Kent",0},
{"Bruce Wayne",1},
...
{"Hal Jordan",65535}
}
vector<Employee*> employeeVec;
int count = sizeof(employeeList) / sizeof(Employee);
for (int i = 0; i < count; i++)
{
employeeVec.emplace(&employeeList[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是Employee类使用的是字符串类而不是c-string,所以我不想在内存中使用它的两个副本.这样我最终只得到指针的额外内存,这仍然是很多,但我相信这是最好的选择!也适用于multi_index_container!谢谢
我想比较characterAtIndex返回的字符和一些"硬"字符,比如@""或@"P".这可能看起来很愚蠢,但我找不到这样做的方法......
如何在不对其大小进行硬编码的情况下初始化另一个类中的类的对象数组?
我为 Windows 10 编写了一个 Python 程序,它将音频文件从任何支持的格式转换为 .flac,并使用 FFMPEG 进行编码。
我的电脑上安装了FFMPEG,所以在我的电脑上运行该程序没有任何问题。
我曾经PyInstaller将程序导出为 .exe,现在我想在发行版中包含 FFMPEG,这样人们就不必单独下载它来运行我的脚本。
我可以将 FFMPEG 包装/包含到我的程序中,并在需要时自动安装/使用它吗?如何?
hardcode ×10
android ×2
arrays ×2
c++ ×2
constants ×2
python ×2
c ×1
character ×1
collections ×1
comparison ×1
containers ×1
export ×1
ffmpeg ×1
gettext ×1
iphone ×1
java ×1
javascript ×1
jquery ×1
large-data ×1
libtool ×1
optimization ×1
pyinstaller ×1
resources ×1
size ×1
string ×1
types ×1
url ×1