因此,在C++/C#中,您可以创建标记枚举以保存多个值,并且在数据库中存储单个有意义的整数当然是微不足道的.
在Java中你有EnumSets,它似乎是一种在内存中传递枚举的好方法,但是你如何将组合的EnumSet输出到一个整数来存储呢?还有另一种方法来解决这个问题吗?
我使用以下命令行启动我的Java应用程序:
java -XX:+PrintCommandLineFlags -verbose:gc -XX:+PrintGCDetails \
-XX:+UseConcMarkSweepGC -jar start.jar
Run Code Online (Sandbox Code Playgroud)
JVM启用以下选项:
-XX:MaxNewSize=87244800 -XX:MaxTenuringThreshold=4 -XX:NewRatio=7
-XX:NewSize=21811200 -XX:OldPLABSize=16 -XX:OldSize=65433600
-XX:+PrintCommandLineFlags -XX:+PrintGC -XX:+PrintGCDetails
-XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseParNewGC
Run Code Online (Sandbox Code Playgroud)
有人能解释我NewRatio和OldSize的含义吗?特别是OldSize是终身一代的初始规模?
python中是否有标志或某些特殊键可以多次使用模式.我曾经测试http://gskinner.com/RegExr/我的RegExp,它在它中正常工作.但是,当在正确的环境中进行测试时,匹配仅返回None.
import re
pattern = r"(?P<date>--\d\d-\w+:\d\d)[ \t]+(?P<user>\w+)[ \t]+(?P<method>[\w ]+)[\" ]* (?P<file>[\w\\:\.]+)@@(?P<version>[\w\\]+)[\" ]*(?P<labels>[\(\w, \.\)]+){0,1}[\s \"]*(?P<comment>[\w \.-]+){0,1}[\"]"
base = """
--02-21T11:22 user3 create version "W:\foo\bar\fooz.bat@@\main\1" (label1, label2, label3, label22, label33, ...)
"merge in new bat-based fooz installer"
--02-21T11:22 user1 create version "W:\foo\bar\fooz.bat@@\main\0"
--02-21T11:22 user2 create branch "W:\foo\bar\fooz.bat@@\main\"
"merge in new bat-based fooz installer"
--02-13T11:22 user1 create version "W:\foo\bar\fooz.bat@@\main\1"
"Made to use new fooz.bat"
"""
r = re.match(pattern, base)
print(r)
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个以flags作为参数的函数,但输出总是与预期的不同:
define("FLAG_A", 1);
define("FLAG_B", 4);
define("FLAG_C", 7);
function test_flags($flags) {
if($flags & FLAG_A) echo "A";
if($flags & FLAG_B) echo "B";
if($flags & FLAG_C) echo "C";
}
test_flags(FLAG_B | FLAG_C); # Output is always ABC, not BC
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
是否有一种方法通常用于检查int /其他数据类型中是否存在标志?我想出这样的事情:
if ((host&flagtocheckfor)==flagtocheckfor)
Run Code Online (Sandbox Code Playgroud)
哪个工作正常 - 但是这种常见的设置标志的方法是通常检查标志的方式吗?还是有更简洁的方法?
我使用cmake进行交叉编译.在我的工具链文件中有一行
SET(CMAKE_C_FLAGS "-std=gnu99")
Run Code Online (Sandbox Code Playgroud)
此变量未再次在CMakeLists.txt中设置.
当我运行cmake -DCMAKE_TOOLCHAIN_FILE=toolchain.cmake ..此标志被忽略.
更详细:显示一行flags.cmake空C_FLAGS =行.但在CMakeOutput.log我能找到一条线Build flags: -std=gnu99.
我发现第二次运行cmake ..(指定或不指定工具链文件)修复了这个问题.
但是为什么我第一次运行cmake时没有设置?
编辑:添加了MNWE
的CMakeLists.txt:
cmake_minimum_required(VERSION 2.6)
project(myproject)
SET(files src/main.c)
add_executable(myexec ${files})
Run Code Online (Sandbox Code Playgroud)
avr.cmake:
SET(CMAKE_SYSTEM_NAME Generic)
SET(CMAKE_C_COMPILER avr-gcc)
SET(CMAKE_C_FLAGS "-std=gnu99")
Run Code Online (Sandbox Code Playgroud) 问题
我有一个自定义的Android视图,我想让用户设置重力以布局内容onDraw.这是我正在使用的简化版本onDraw:
// check gravity
if ((mGravity & Gravity.CENTER_VERTICAL) == Gravity.CENTER_VERTICAL) {
// draw the content centered vertically
} else if ((mGravity & Gravity.BOTTOM) == Gravity.BOTTOM) {
// draw the content at the bottom
}
Run Code Online (Sandbox Code Playgroud)
其中mGravity从XML属性(获得这样).
如果我将引力设置为Gravity.CENTER_VERTICAL它可以正常工作.但我很惊讶地发现,如果我把它设置为Gravity.BOTTOM,那么Gravity.CENTER_VERTICAL检查仍然是真的!
为什么会这样?
我必须查看二进制值才能看出原因:
0001 0000, Gravity.CENTER_VERTICAL:常量值:16(0x00000010)0101 0000, Gravity.BOTTOM:常量值:80(0x00000050)因此,当我这样做
mGravity = Gravity.BOTTOM;
(mGravity & Gravity.CENTER_VERTICAL) == Gravity.CENTER_VERTICAL
// (0101 & 0001) == 0001 …Run Code Online (Sandbox Code Playgroud) 嘿大家,得到一个我似乎无法找到任何关于......的快速问题
我正在开发一个需要带有大量标志(最多40-ish)的标志枚举的项目,我真的不想为每个枚举值键入精确的掩码:
public enum MyEnumeration : ulong
{
Flag1 = 1,
Flag2 = 2,
Flag3 = 4,
Flag4 = 8,
Flag5 = 16,
// ...
Flag16 = 65536,
Flag17 = 65536 * 2,
Flag18 = 65536 * 4,
Flag19 = 65536 * 8,
// ...
Flag32 = 65536 * 65536,
Flag33 = 65536 * 65536 * 2
// right about here I start to get really pissed off
}
Run Code Online (Sandbox Code Playgroud)
此外,我也希望有一种简单的方法可以控制不同端机器上的实际比特排列,因为这些值最终将通过网络进行序列化:
public enum MyEnumeration : uint
{
Flag1 = 1, // …Run Code Online (Sandbox Code Playgroud) 我有一个PowerShell函数,它可以更改注册表项值.码:
param(
[Parameter()] [switch]$CreateNewChild,
[Parameter(Mandatory=$true)] [string]$PropertyType
)
Run Code Online (Sandbox Code Playgroud)
它有一个参数"CreateNewChild",如果设置了该标志,该函数将创建key属性,即使找不到它也是如此.参数"PropertyType"必须是必需的,但仅限于已设置"CreateNewChild"标志.
问题是,如何强制执行参数,但仅在指定了其他参数的情况下?
好的,我一直在玩它.这确实有效:
param(
[Parameter(ParameterSetName="one")]
[switch]$DoNotCreateNewChild,
[string]$KeyPath,
[string]$Name,
[string]$NewValue,
[Parameter(ParameterSetName="two")]
[switch]$CreateNewChild,
[Parameter(ParameterSetName="two",Mandatory=$true)]
[string]$PropertyType
)
Run Code Online (Sandbox Code Playgroud)
但是,这意味着$ KeyPath,$ Name和$ NewValue不再是强制性的.将"one"参数设置为必需会中断代码("参数集无法解析"错误).这些参数集令人困惑.我确定有办法,但我无法弄清楚如何做到这一点.
所以基本上我自己编写了这个函数,以便能够计算String中Substring的出现次数:
String.prototype.numberOf = function(needle) {
var num = 0,
lastIndex = 0;
if(typeof needle === "string" || needle instanceof String) {
while((lastIndex = this.indexOf(needle, lastIndex) + 1) > 0)
{num++;} return num;
} else if(needle instanceof RegExp) {
// needle.global = true;
return this.match(needle).length;
} return 0;
};
Run Code Online (Sandbox Code Playgroud)
该方法本身表现相当不错,基于RegExp和基于字符串的搜索与执行时间相当(在整个庞大的Ray Bradbury的"451 Fahrenheit"上搜索所有"the"的两个~2ms).
但是,令我感到困扰的是,无法更改提供的RegExp实例的标志.在没有提供的正则表达式的全局标志设置为true的情况下调用此函数中的String.prototype.match是没有意义的,因为它只会记录第一次出现.你当然可以在传递给函数的每个RegExp上手动设置标志,但我更喜欢能够克隆然后操作提供的正则表达式的标志.
令人惊讶的是,我不允许这样做,因为RegExp.prototype.global标志(更确切地说是所有标志)似乎是只读的.从那里评论出来的第8行.
所以我的问题是:有没有一种很好的方法来更改RegExp对象的标志?
我真的不想做这样的事情:
if(!expression.global)
expression = eval(expression.toString() + "g");
Run Code Online (Sandbox Code Playgroud)
某些实现可能不支持RegExp.prototype.toString事件,只是从Object.prototype继承它,或者它可能完全是不同的格式.而这似乎是一个糟糕的编码实践开始.
flags ×10
java ×3
regex ×2
android ×1
c ×1
c# ×1
cmake ×1
dependencies ×1
endianness ×1
enumeration ×1
function ×1
global ×1
javascript ×1
memory ×1
options ×1
parameters ×1
php ×1
powershell ×1
prototype ×1
python ×1
registry ×1