我使用WPF工具包图表来显示带有数据点的几个系列.我为LineDataPoints创建了样式,这些样式使用画布,在画布上绘制符号(如圆圈).
这是样式定义之一:
<Style x:Key="CircleDataPointStyleRed"
TargetType="chartingToolkit:LineDataPoint">
<Setter Property="Background"
Value="Red" />
<Setter Property="IsTabStop"
Value="False" />
<Setter Property="Width"
Value="10" />
<Setter Property="Height"
Value="10" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="chartingToolkit:LineDataPoint">
<Canvas>
<Ellipse Height="10"
Width="10"
Stroke="Red" />
</Canvas>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Run Code Online (Sandbox Code Playgroud)
当我将数据加载到视图模型中时,图表会正确显示,线条可见,并且绘制的数据点居中到正确的位置,因此圆的中心点位于实际数据点的位置.现在,当我将一组不同的数据加载到图表中时(更改LineSeries绑定的ObservableCollections),仍然可以正确绘制线条,但圆圈不会再绘制在中心,而是将其画布的左上角放在实际数据点的位置.当我调整图表大小时,圆圈的位置再次正确.
这里有一些屏幕截图要澄清:
加载第一个数据后:

数据更改为不同值后:

图表调整后:

到目前为止我尝试过的(每个都无济于事):
即使在更改数据后,如何才能在正确的位置绘制数据点?
为了表示DSL语法树,我有表示该树的数据类型.在这个树的几个地方,我得到了许多可选的子元素和/或具有"*"多样性.所以一种数据类型可能看起来像
data SpecialDslExpression = MyExpression String [Int] Double [String] (Maybe Bool)
Run Code Online (Sandbox Code Playgroud)
我正在寻找的是构建这样一种类型而不必指定所有参数的可能性,假设我有一个有效的默认值.使用场景是这样的,我需要创建许多类型的实例,其中给出或省略了其参数的各种组合(大多数时间是两个或三个),但很少都是这些.将参数分组为子类型不会让我走得太远,因为参数组合不遵循会使分段改善问题的模式.
我可以使用不同的参数组合来定义函数,以使用其余的默认值来创建类型,但是我可能最终会有很多这些函数很难正确命名,因为可能无法给出正确的名称.createWithFirstAndThirdParameter在给定的背景下的想法.
所以最后问题归结为:是否有可能创建这样的数据类型或对它的抽象,这会给我一些像我可以指定的可选参数或希望省略的东西?
我在F#中定义了一个带有重载方法的接口.根据编译器请求,重载使用了tupled参数而不是curried参数:
type IInterface =
abstract member Do : (int * string) -> unit
abstract member Do : int -> unit
Run Code Online (Sandbox Code Playgroud)
然后我创建一个实现接口的类:
type ImplementingClass =
interface IInterface with
member this.Do (i, s) = ()
member this.Do i = ()
Run Code Online (Sandbox Code Playgroud)
但是,这样做会导致两种方法中的第一种产生编译器错误:"此覆盖对相应的抽象成员采用不同数量的参数"
我在这做错了什么?
我需要以下数据结构:
在具有存储器插槽的设备中,每个插槽具有一组参数.这些参数有不同的类型.可能的参数列表是固定的,因此不需要通用的灵活性»支持任意参数而无需改变«.而且,对于每个参数,内容的结构是已知的.典型的用例是检索和修改一个特定参数,以及将完整参数集转换为不同(但已定义)的数据结构.
F#数据结构的自然选择是这样的和类型:
type SomeParameterContentType = { Field1 : string, Field2 : int }
type SomeOtherParameterContentType = { Other1 : bool option, Other2 : double }
type Parameter =
| SomeParameter of SomeParameterContentType
| SomeOtherParameter of SomeOtherParameterContentType
Run Code Online (Sandbox Code Playgroud)
这样我就可以用一个非常好的数据结构创建一个集合并存储参数.这里的问题是:鉴于这个想法,如何寻找一个特定的参数?我不知道为set的find-function指定谓词的任何方法.有可能定义另一个和类型列出参数类型而没有它们的内容,使用它作为词典的键,但我不太喜欢这个想法.使用字符串而不是第二个和类型并不能使事情变得更好,因为它仍然需要提供两次可能的参数列表.
有没有人有更好的主意?
Thx --Mathias.
问题:当我想知道在使用给定语言环境时哪个字符将用于十进制分组时,我需要查看哪些内容?
我尝试了以下代码:
Locale locale = new Locale("Finnish", "fi");
DecimalFormat format = (DecimalFormat) DecimalFormat.getInstance(locale);
System.out.println(format.format(12345678.123));
Run Code Online (Sandbox Code Playgroud)
这里的问题是,语言环境的参数似乎不正确,但无论如何我认为必须有一些地方可以查找这些信息而无需为其编写程序.
似乎这些东西不是从我的机器上的区域设置中获取的,因为我在Windows控制面板中更改了德语的字符,但java程序中没有任何变化.
我想要一些代码,我想调用一个函数,foo其中foo的不同实现驻留在不同的模块中.
喜欢
foo :: String -> IO[String]
Run Code Online (Sandbox Code Playgroud)
模块A:
foo :: String -> IO[String]
foo x = whatever
Run Code Online (Sandbox Code Playgroud)
模块B:
foo :: String -> IO[String]
foo x = whatever (different)
Run Code Online (Sandbox Code Playgroud)
然后根据某个参数调用相应的函数.我可以用合格的进口做:
import qualified ModuleA as A
import qualified ModuleB as B
bar :: String -> String -> IO[String]
bar moduleToChoose x = case moduleToChoose of
"A" -> A.foo x
"B" -> B.foo x
_ -> Uh oh...
Run Code Online (Sandbox Code Playgroud)
然而,这基本上是尖叫"有一个更优雅的解决方案,但你只是没有得到它!" 有更好的解决方案吗?
给出以下代码:
long l = 1234567890123;
double d = (double) l;
Run Code Online (Sandbox Code Playgroud)
以下表达式保证是真的吗?
l == (long) d
Run Code Online (Sandbox Code Playgroud)
我应该不这么认为,因为随着数字的增大,两个双精度数之间的差距会超过1,因此转换回产生不同的长值.如果转换不采用大于long值的值,则可能也会更早发生.
对此有明确的答案吗?