到目前为止,Scala中的隐式参数对我来说并不好看 - 它太接近于全局变量,但是由于Scala看起来像是相当严格的语言,我开始怀疑自己的看法:-).
问题:当隐式参数真正起作用时,你能展示一个真实(或接近)的好例子吗?IOW:比这更严重的东西showPrompt
,这将证明这种语言设计的合理性.
或者相反 - 你能否展示出可靠的语言设计(可能是想象的),这种设计会使隐含的不必要.我认为即使没有机制比implicits更好,因为代码更清晰,没有猜测.
请注意,我问的是参数,而不是隐式函数(转换)!
谢谢你们所有的好答案.也许我澄清了我的"全局变量"异议.考虑这样的功能:
max(x : Int,y : Int) : Int
Run Code Online (Sandbox Code Playgroud)
你叫它
max(5,6);
Run Code Online (Sandbox Code Playgroud)
你可以(!)这样做:
max(x:5,y:6);
Run Code Online (Sandbox Code Playgroud)
但在我眼中的implicits
作用是这样的:
x = 5;
y = 6;
max()
Run Code Online (Sandbox Code Playgroud)
它与这样的构造(类似PHP)没有太大的不同
max() : Int
{
global x : Int;
global y : Int;
...
}
Run Code Online (Sandbox Code Playgroud)
这是一个很好的例子,但如果你能想到不使用发送消息的灵活使用implicit
请发一个反例.我对语言设计的纯度非常好奇;-).
可能重复:
Scala中的LINQ类似物
我正在寻找图表,它显示了IEnumerable的LINQ方法的Scala中的等价物:
有谁知道这样的"翻译"表吗?
是不支持,是否支持,但我必须做一些技巧?
例:
class Foo
{
public Foo<T1,T2>(Func<T1,T2> f1,Func<T2,T1> f2)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
泛型只在构造函数中使用,没有依赖于它们的字段/属性,我使用它(泛型)来强制执行f1和f2的类型相关.
备注:我找到了解决方法 - 静态方法创建,但无论如何我很好奇为什么我有直接方法的问题.
我在VS(2008)中有一个C#/ ASP.Net解决方案,里面有几个项目.当我尝试编译它时,我只得到一个错误:
尝试访问已卸载的AppDomain
没有行代码,没有项目名称,没有.就是这样的错误.
我怎样才能确定这个错误 - 即原因,甚至更好 - 如何解决它并继续编译?
先感谢您.
我最好通过例子问这个问题.假设我有UserControl和Window使用此控件.
我想以这种方式设计这个控件(名为MyControl)(这是科幻语法!):
<Grid>
<Button>Just a button</Button>
<PlaceHolder Name="place_holder/>
</Grid>
Run Code Online (Sandbox Code Playgroud)
在设计我的Window时以这种方式使用:
<MyControl/>
Run Code Online (Sandbox Code Playgroud)
要么
<MyControl>
<place_holder>
<Button>Button 1</Button>
</place_holder>
</MyControl>
Run Code Online (Sandbox Code Playgroud)
要么
<MyControl>
<place_holder>
<Button>Button 1</Button>
<Button>Button 2</Button>
</place_holder>
</MyControl>
Run Code Online (Sandbox Code Playgroud)
当然我希望能够在Window中为MyControl添加更多元素.因此,在某种程度上它应该作为容器(如Grid,StackPanel等)工作.该位置将在UserControl中定义(在此示例中,在按钮"只是一个按钮"之后)但是要添加的内容(哪些元素)将在Window中定义(使用UserControl - MyControl).
我希望这很清楚我想要实现的目标.关键点是在设计Window时使用XAML,因此我的类应该不比其他控件差.
现在,最大的问题是 - 如何做到这一点?
备注:样式超出范围.我想要做的就是在设计Window时添加我想要的任何控件MyControl(而不是在设计MyControl时).
标准WPF 4 Datagrid.
假设我有200像素宽的数据网格和2列.我希望列总是占用整个空间,这意味着如果用户将第一列调整为50像素,则最后一列将为150.
最初我为第1列设置宽度为100像素,为最后一列设置*(在XAML中).
我认为问题在于删除虚拟的第3列,如下所述:
http://wpf.codeplex.com/Thread/View.aspx?ThreadId=58939
但实际上没有区别 - 仍然,当调整列的大小时,我在右边获得了一些额外的空间 - 使用虚拟列,它是一个虚拟列(默认为白色),没有它,它是空的空间(灰色的默认).
问题:如何强制执行约束,无论用户如何调整列的大小,
sum(columns width)==datagrid width
Run Code Online (Sandbox Code Playgroud)
?
是的,我使用WPF 4.
替代方法
我将其中一个答案标记为解决方案,但实际上它并不是WPF设计的解决方案.它只是WPF最多可以做的事情,它并不是很好 - 首先,列的选项CanUserResize实际上是IsResizeable,当打开时这个选项与Width设置为*相矛盾.因此,如果没有一些非常聪明的技巧,你最终会:
datagrid表示最后一列表面可调整大小,但事实上它不是,右边的空间很小(即虚拟列不可调整大小) - 最后一列:CanUserResize = true,Width =*
datagrid哪个最后一列不能被用户调整,并且相应地显示,最初没有显示右边的空格,但是当用户调整datagrid的任何元素时可以显示 - 对于最后一列:CanUserResize = false,Width =*
到目前为止,我可以看到WPF datagrid的两个问题:
我仍然很清楚如何真正解决这个问题.
当我添加水平ProgressBar时,它的行为与预期一致 - 我设置了进度值并显示它.
然而,当我添加ProgressBar(圆形)时,它会旋转.就是这样.在这种形式下,它更"请等待"指示,即任何进度条,因为未显示进度值.
所以我的问题是(假设进步名称意味着进步) - 如何停止旋转并显示进度值?例如,如果我将max设置为100,并将值设置为50,我希望看到半圆弧.
换句话说,如何使循环ProgressBar表现得像水平ProgressBar,只有形状除外?
创建报表(RDLC)时,数据源似乎只是此数据库或该数据库.有没有办法说服VS建立内存数据源的链接?类似于WPF数据绑定的东西.
问题是,我想用一些数据创建一个报告(由用户输入),整点是布局,我没有大量的数据.因此,安装数据库,将数据写入数据库,然后只是为了显示报告而获取它们是一种巨大的过度杀伤力.
所以,我正在寻找从内存数据创建报告的能力.
我想设计一个布局,添加图像,设置样式,字体颜色等,并添加不超过几个参数,如"名字","姓氏"(用户)和"文本".用户将输入这3个值,获取传单并将其打印X次.布局必须准确 - 从纸张尺寸,图像位置,字体大小等开始.
也许有比RDLC更好的解决方案,但它是内置引擎,无论我如何搜索它总是在搜索结果中弹出.
我想为DataGrid(标准,来自WPF)设置这样的大小,以便所有单元格(文本)都是完全可见的.我有一个带有DockPanel的窗口,里面有DataGrid,所以当我调整窗口大小时,所有嵌套的小部件(DockPanel和DataGrid)都会相应地调整大小.
示例(编辑-1)
假设你有100个像素宽的窗口,你有一个列的DataGrid,哪个单元格是"快速棕色狐狸......"(400像素宽).因此,DataGrid应该调整为400像素(可能更多,因为填充),窗口也应该调整为400像素(由于填充也更多).
我没有找到任何标准方法来做到这一点(AFAIK WPF提供了将内容剪辑到所需宽度的方法,我的问题正好相反),所以我想出了这样丑陋的解决方法,这不太合适.
我做了几次测试,在某些情况下计算出的宽度太大(这是一个小问题),因为有些情况太小了.问题从它的核心过程开始 - 计算TextBox/TextBlock所需的宽度,计算出的宽度总是比它应该小1个单位(如果我将宽度设置为计算宽度,则始终剪切文本中的1个像素).
那么我忽略了哪个因素呢?或者更好 - 是否已经有一些方法可以调整DataGrid以适应其内容?
计算文本所需的宽度(此处为TextBlock):
public static double TextWidth(this TextBlock widget, string text)
{
var formattedText = new FormattedText(text, // can use arbitrary text
System.Globalization.CultureInfo.CurrentCulture,
widget.FlowDirection,
widget.FontFamily.GetTypefaces().FirstOrDefault(),
widget.FontSize,
widget.Foreground);
return formattedText.Width+widget.Padding.Left+widget.Padding.Right;
}
Run Code Online (Sandbox Code Playgroud)
调整窗口大小以适应DataGrid内容(ugly_factor是丑陋的解决方法;-)因为我没有弄清楚如何正确修复它我将它设置为1.3,这样我的窗口"永远不会"太小):
public static void AdjustWidthToDataGrid(this Window window, DataGrid dataGrid, double ugly_factor)
{
var max_widths = dataGrid.Columns.Select(it => window.TextWidth(it.Header as string)
* ugly_factor).ToArray();
foreach (var row in Enumerable.Range(0, dataGrid.Items.Count)) …
Run Code Online (Sandbox Code Playgroud) 注意:我不是在询问指针和引用之间的区别,对于这个问题,它完全无关紧要.
有一点我无法明确说明 - 尼姆罗德使用的是什么型号?
就像C++一样 - 你有值并且new
你创建了指向数据的指针(在这种情况下,变量可以保存指向指向数据的指针的指针)?
或者像C# - 你有POD类型作为值,但用户定义的对象有引用(隐式)?
我发现只有dereferencing是自动的,就像在Go中一样.
另一种方式.你定义你的新类型,比方说Student
(名字,大学,地址).你写:
var student ...?
Run Code Online (Sandbox Code Playgroud)
student
保持实际数据(的Student
类型/类)student
持有的指针数据student
持有指针的指针数据或者那些点不可能?
c# ×4
wpf ×3
datagrid ×2
scala ×2
android ×1
constructor ×1
containers ×1
generics ×1
ienumerable ×1
implicit ×1
iterable ×1
layout ×1
linq ×1
nim-lang ×1
parameters ×1
placeholder ×1
pointers ×1
rdlc ×1
report ×1
types ×1