我正在使用水平滚动条进行页面布局.我有一些水平顺序固定宽度的面板,它们都应该具有视口高度.我决定测试一下这个vh单元.
.panel { height: 100vh; }
Run Code Online (Sandbox Code Playgroud)
这工作正常,直到我得到一个滚动条.问题是,vh忽略滚动条使用的高度,因此添加了一个垂直滚动条.
我想从测量结果中减去滚动条的高度vh; 有没有办法做到这一点?
有没有人有机会深入了解F#计量单位的工作原理?它只是基于类型的chicanery,还是隐藏在其下的CLR类型可能(可能)从其他.net语言中使用?它适用于任何数值单位,还是仅限于浮点值(这是所有示例使用的)?
这可能听起来很傻但是当我在Xcode中使用尺寸时,总框架尺寸等于320*568(宽*高).我很好.但手机的分辨率实际上是不同的.iphone 4S是640*960,5和下一代是640*1136.
我知道最后一个是xcode用作单位的两倍,所以我的问题是:
XCode使用什么单位测量?如果是像素,为什么不使用手机尺寸/分辨率作为参考?
我正在研究游戏引擎,目前我不得不设计IO系统.我已经做到了,引擎本身不处理任何文件格式,而是让用户通过创建*.dll具有适当命名函数的文件来实现他想要的任何东西.虽然这本身并不是什么大问题,但我主要担心的是在发动机使用过程中可能会出现的影响.
我设计了一个简单的resource接口作为用户可以想到的所有东西的基类,我试图通过创建专用于常见数据类型的简单子类来扩展它,因此用户不必实现基础知识由他本人(目前我在想audio,image,data和mesh).从audio课堂开始,我偶然发现了一个特殊的问题,同时试图决定应该以什么类型存储有关采样率的信息.通常的单位是赫兹,所以我决定把它变成一个unsigned int.
但是这里有一点问题 - 如果用户试图用千赫兹设置它会怎么样?让我们假设一些抽象文件格式可以暂时将它存储在两个单元中.我已经创建了一个简单的包装类来命名单元类型:
class hertz{
private:
unsigned int value;
hertz(){};
public:
operator unsigned int();
hertz(unsigned int value);
};
Run Code Online (Sandbox Code Playgroud)
并决定让用户也使用kHz:
class kilohertz{
private:
float value;
kilohertz(){};
public:
operator hertz();
kilohertz(float value);
};
Run Code Online (Sandbox Code Playgroud)
虽然audio类中的函数允许用户设置采样率,但声明为track& samplingRate(units::hertz rate);.用户必须通过明确说出他正在使用的数量级来调用它:
someAudioFile.samplingRate(hertz(44100));
someAudioFile.samplingRate(kilohertz(44.1));
Run Code Online (Sandbox Code Playgroud)
我的问题是:
是否有更好的方法迫使用户以简单而优雅的方式使用测量单元?一个设计模式可能,或者一些巧妙使用typedef?
另请注意,在创建引擎的过程中,我可能需要更多与Hertz不兼容的单元.从我的头脑 - 我可能希望用户能够通过做units::rgb(123,42,120)和设置像素颜色units::hsl(10,30,240).
我已经尝试寻找一个可行的答案并且只找到了这个问题,但OP只需要数量级而不确保单位与其他单位不兼容.
另请注意我使用旧 …
我正在使用F#开发Web应用程序.考虑保护用户输入字符串免受SQL,XSS和其他漏洞的影响.
换句话说,我需要一些编译时约束,这些约束允许我将纯字符串与表示SQL,URL,XSS,XHTML等的字符串区分开来.
许多语言都有它,例如Ruby的原生字符串插值功能#{...}.
使用F#,似乎度量单位表现非常好,但它们仅适用于数字类型.
有几种解决方案采用运行时 UoM (链接),但我认为这是我的目标的开销.
我查看了FSharpPowerPack,似乎很有可能为字符串提出类似的东西:
[<MeasureAnnotatedAbbreviation>] type string<[<Measure>] 'u> = string
// Similarly to Core.LanguagePrimitives.IntrinsicFunctions.retype
[<NoDynamicInvocation>]
let inline retype (x:'T) : 'U = (# "" x : 'U #)
let StringWithMeasure (s: string) : string<'u> = retype s
[<Measure>] type plain
let fromPlain (s: string<plain>) : string =
// of course, this one should be implemented properly
// by invalidating special characters and then assigning a proper UoM
retype s
// Supposedly populated …Run Code Online (Sandbox Code Playgroud) 而在一般情况,是用于单位-Xmx,-Xms和-Xmn选项("K","M"和"G",或不太标准的可能性"K","m"或"G")的二进制前缀倍数(即,功率1024),还是1000的力量?
手册说它们代表千字节(kB),兆字节(MB)和千兆字节(GB),表明它们是原始SI系统中定义的1000的幂.我的非正式测试(我不是很自信)表明他们真的是kibibytes(kiB),mebibytes(MiB)和gibibytes(GiB),所有权力都是1024.
哪个是对的?例如,什么Java代码会显示当前大小?
使用1024的倍数对于RAM大小来说并不奇怪,因为RAM通常通过加倍硬件模块来物理布局.但是,随着我们获得越来越大的权力,以明确和标准的方式使用单位变得越来越重要,因为混乱的可能性会增加.单位"t"也被我的JVM接受,1 TiB比1 TB大10%.
注意:如果这些确实是二进制倍数,我建议更新文档和用户界面以非常清楚,例如" 附加字母k或K表示kibibytes(1024字节)"或m或M表示mebibytes( 1048576字节) ".这就是采用的方法,例如在Ubuntu:UnitsPolicy - Ubuntu Wiki中.
注意:有关选项用途的更多信息,请参阅例如java - 启动JVM时Xms和Xmx参数是什么?.
最近我发现WPF支持XAML中的不同测量单位.除了默认DIP,还支持像素,英寸和厘米(据我所知).这允许设计者编写如下的XAML:
<Canvas>
<Line X1="0cm" X2="3cm" Y1="1cm" Y2="3cm" Stroke="Black"/>
</Canvas>
Run Code Online (Sandbox Code Playgroud)
但是,您无法绑定这些值.想象一下,我们有一个带有Dimension属性的ViewModel,它是一个String,例如"7cm".以下将无效:
<Button Width="{Binding Dimension}">Test</Button>
Run Code Online (Sandbox Code Playgroud)
抛出FormatException.同样,FrameworkElement在代码隐藏中创建时,如下所示:
Canvas1.Children.Add(new Button() { Width = "3cm", Content = "Test"});
Run Code Online (Sandbox Code Playgroud)
编译失败,因为在构造函数/尝试创建控件的任何地方抛出异常.
我想知道:
编辑:
以下是评论中的链接,可解决此问题:
http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.width.aspx
我想在视图上使用特定高度(以像素为单位)绘制文本Canvas.你可以简单地使用Paint.setTextSize(float)像素数或使用dp或sp?
在我的项目,地方我有一个工作unitOfIssue的Items.现在,各种项目当然可以有不同的表示单位.所以,我正在寻找一些API或某种方式,以优雅地处理这种情况.
是否有任何可用的API,它提供了一些表示这些单位的方法?我听说JScience似乎令人印象深刻,但我再次面临着映射它的另一个问题JPA.在一些谷歌工作之后,我发现在这种情况下正在进行一些工作 - JScience-JPA,但似乎在生产中使用它还不稳定.
我也发现了一些关于JSR-275的东西,但是从这个JCP页面看来它似乎已经被拒绝了.
然后我遇到了单位测量,我还没有深入细节.但是,同样的问题也来了.这可以用JPA映射吗?
编辑: -从这个SO问题我遇到了带有Unit的Java Numbers,但我不知道它是否已准备好生产.
我真的很困惑,特别是在看到上述选项之后.JPA是一个额外的问题,我是否可以使用它们中的任何一个.有没有人遇到过这样的情况,并找到了解决方法?我真的需要一些帮助.我该怎么用?如果没有其他出路,那么表示这些单位的适当方式是什么.我看到的一种方法是使用enums.但是,当然,这将是最后的选择.
有没有办法使用Python类型提示作为单位?类型提示文档显示了一些示例,表明可以使用NewType,但这些示例也表明,相同“新类型”的两个值相加不会给出“新类型”的结果,而是给出基本类型的结果。有没有一种方法可以丰富类型定义,以便您可以指定像单位一样工作的类型提示(不是它们转换的范围,而是当您获得不同单位时收到类型警告)?可以让我执行此操作或类似操作的东西:
Seconds = UnitType('Seconds', float)
Meters = UnitType('Meters', float)
time1 = Seconds(5)+ Seconds(8) # gives a value of type `Seconds`
bad_units1 = Seconds(1) + Meters(5) # gives a type hint error, but probably works at runtime
time2 = Seconds(1)*5 # equivalent to `Seconds(1*5)`
# Multiplying units together of course get tricky, so I'm not concerned about that now.
Run Code Online (Sandbox Code Playgroud)
我知道单元的运行时库存在,但我好奇的是 python 中的类型提示是否能够处理某些功能。