我已经使用F#最近,试图在功能的实现代码,而不是在不同的语法做一遍OOP.我现在已经运行到,我可以用继承和歧视工会的混合解决问题,但对于我想找一个纯粹的功能性风格的表示.
我想要建模的是这样的(改为保留模式,因为我不能使用实际的代码):
type Shape =
| Rectangle of Size * Size
| Circle of Diameter
Run Code Online (Sandbox Code Playgroud)
到目前为止这么好,但现在我需要代表一组与不同类型的形状相关的其他属性,例如:
type ShapeProperty =
| Color of Shape * Color // Fine, valid for all shapes
| Rotation of Shape * Angle // Wants to be Rotation of Rectangle * Angle
| Details of Shape * int // Wants to be Detail of Circle * int
Run Code Online (Sandbox Code Playgroud)
如果不使用Shape的区别联合,我使用了基类和继承,我可以参考实际类型并确保Rotation只能应用于Rectangle而不是Circle,但现在我不能.有没有办法实现类似的东西,同时仍然保持纯粹的功能数据结构?
编辑:
我目前的解决方案是将单个形状的定义与形状完全相关的事实分开,如下所示:
type Rectangle = Rectangle of Size * Size // Or using a record type
type Circle …Run Code Online (Sandbox Code Playgroud) 我有以下C#代码片段:
using System;
class count {
public static void Main()
{
int [] a = {-30, 30, -20, -10, 40, 0, 10, 5};
int i,j,k;
int N=8;
for (i=0; i < N; ++i)
for (j=i+1; j < N; ++j)
for (k=j+1; k < N; ++k)
if (a[i] + a[j] + a[k] == 30)
Console.WriteLine (a[i].ToString () + a[j].ToString() + a[k].ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
上述程序的作用是从阵列A中找出三元组a1,a2,a3,使得三元组的总和为30.
我想知道如何使用C#Parallel.For扩展计算和计算.
我知道这被用作面试问题,并且有比i,j,k循环更好的替代算法.但是,我想要的只是了解如何使用C#的并行扩展以有效的方式执行此操作.
我需要从字符串中替换非数字字符.
例如,"8-4545-225-144"需要为"84545225144"; "$ 334fdf890 == - "必须是"334890".
我怎样才能做到这一点?
有没有办法找出或计算iPhone相机通过调用API的视野(FOV)?或者你需要亲身体验一下吗?
如果无法使用API获取或计算它,而是必须将其硬编码到应用程序中,那么找出应用程序运行的设备类型的最佳方法是什么?不同的设备具有不同的FOV(iPhone 4具有比以前版本更大的FOV.)另外,每个设备的FOV究竟有多大?
我问,因为我正在考虑制作一个增强现实应用程序,并且知道FOV是必不可少的.
我有一个html表,我已经设置为3行2列形式.所以基本上有6个单元格正在显示给suer.
我的问题是不确定该怎么做,是因为我只想使用仅对用户可见的5个单元格,所以想要以某种方式移除单元格位置(3,2),以便它根本不显示任何边框单独的细胞 - 这可以做到,如果是这样,怎么办?
谢谢.
我正在编写一个非常简单的异步助手类来配合我的项目.该类的目的是允许方法在后台线程上运行.这是代码;
internal class AsyncHelper
{
private readonly Stopwatch timer = new Stopwatch();
internal event DownloadCompleteHandler OnOperationComplete;
internal void Start(Func func, T arg)
{
timer.Start();
func.BeginInvoke(Done, func);
}
private void Done(IAsyncResult cookie)
{
timer.Stop();
var target = (Func) cookie.AsyncState;
InvokeCompleteEventArgs(target.EndInvoke(cookie));
}
private void InvokeCompleteEventArgs(T result)
{
var args = new EventArgs(result, null, AsyncMethod.GetEventByClass, timer.Elapsed);
if (OnOperationComplete != null) OnOperationComplete(null, args);
}
#region Nested type: DownloadCompleteHandler
internal delegate void DownloadCompleteHandler(object sender, EventArgs e);
#endregion
}
Run Code Online (Sandbox Code Playgroud)
然后通过OnOperationComplete事件返回任务的结果.问题是,当事件被引发时,它仍然在后台线程上.即如果我尝试运行此代码(如下),我会遇到交叉线程错误;
txtOutput.AppendText(e.Result + Environment.NewLine);Run Code Online (Sandbox Code Playgroud)
请告知任何想法.
conkeror我开始使用它和它的伟大!但我无法找到如何将浏览器中的某些文本复制到剪贴板中?
我在下面看到了关于c ++标准$ 6.4.2中switch语句的事情.
Switch语句可以采取一个条件.
条件应为整数类型,枚举类型或类型,其中存在单个转换函数为积分或枚举类型(12.3).如果条件是类类型,则通过调用该转换函数来转换条件,并使用转换结果代替本节其余部分的原始条件
我尝试下面的代码,工作正常.
class Test
{
public:
operator int() { return 1; }
};
int main()
{
Test obj;
switch(obj)
{
case 1: cout<<"Test class object";
break;
}
}
Run Code Online (Sandbox Code Playgroud)
与使用typeid运算符查找对象类型相比,这是一种更好的方法吗?
在switch case方式中,开销是每个类应该有一个唯一的整数id,它将由转换函数返回.
以typeid方式,如果我们使用类似typeid(obj)== typeid(Test),如果我们有很多类类型,if else链将会很长.代码可读性降低.与switch情况相比可能更慢,因为switch case可能像Compiler的跳转表一样实现
那么,哪种方式更适合在运行时找到对象类型?
编辑:考虑安德烈的评论纠正的问题.
我有两个字符串,一个是由PHP生成的,存储在128个字符的数据库中.生成的字符串通过电子邮件发送给用户,他们必须输入字符串.
现在由于某种原因,来自用户(我测试)的那个,长达132个字符var_dump.当我echo他们,他们是完全一样的.同样的事情var_dump.字符数除外.这些额外的4个(不可见)字符来自哪里?
一个cusomized UINavigationBar要求我提供一个定制的"后退"按钮,我使用navigationItem.leftBarButtonItem = myCustomizedButton,但它的位置是固定的.
有人愿意分享如何将这个按钮40像素移到右边?