我想知道以下是否是访客模式的可接受用途.从Accept()或Visit()调用返回时我感到有点不舒服 - 这是否适合使用此模式,如果没有,为什么不呢?
注意:长代码示例的道歉,似乎有必要了解我正在做的事情,因为访问者似乎总是有点参与......
interface IAnimalElement<T>
{
T Accept(IAnimalVisitor<T> visitor);
}
interface IAnimalVisitor<T>
{
T Visit(Lion lion);
T Visit(Peacock peacock);
T VisitZoo(List<Animal> animals);
}
abstract class Animal
{
public int Age { get; protected set; }
}
class Lion : Animal, IAnimalElement<int>
{
public Lion(int age)
{
Age = age;
}
public int Accept(IAnimalVisitor<int> visitor)
{
return visitor.Visit(this);
}
}
class Peacock : Animal, IAnimalElement<int>
{
public Peacock(int age)
{
Age = age;
}
public int Accept(IAnimalVisitor<int> visitor)
{ …Run Code Online (Sandbox Code Playgroud) 手写递归下降解析器(不可避免地是LL(k))在性能方面与生成的LALR解析器相比如何?
我知道LALR解析器能够处理比LL(k)更多的语法; 但是我打算手工编写我的解析器,递归下降似乎是最合适的选择.是否有可能手工编写任何其他类型(合理可读)?
NB我正在使用带尾调用优化(F#)的函数式语言,因此[精心定制的]递归不会像其他语言一样出现问题.
是否有任何方法可以对有区别的联合函数进行模式匹配,例如: -
type Test =
| A of string
| B of int
| C of char
let DefaultTest t =
match t with
| A(_) -> A(null)
| B(_) -> B(0)
| C(_) -> C('\u0000')
let a = A |> DefaultTest
Run Code Online (Sandbox Code Playgroud)
显然这段代码无效F#,因为DefaultTest接受一个Test类型的参数而不是'a - > Test.如果没有为受歧视的联盟指定价值,有没有办法实现这一目标?
最终,我所追求的是一个输入类型'a - > Test并输出Test(默认值'a)的函数的函数.
由于C#在许多方面是Java的直接衍生物,我想知道在学习了相当合理的C#之后学习Java是否有任何好处?
注意:请提供明确,直接的建议而不是讨论,以符合SO指南.
我知道这可能是有史以来最愚蠢的问题,但是当涉及到CSS时,我是一个初学者; 如何使用源自CSS的图像在网页上超链接图像?我试图在我的网站上设置标题图像链接到首页.谢谢!
编辑:为了说清楚,我是从CSS获取我的图像,标题div的CSS代码如下: -
#header
{
width: 1000px;
margin: 0px auto;
padding: 0px 15px 0px 15px;
border: none;
background: url(images/title.png) no-repeat bottom;
width: 1000px;
height: 100px;
}
Run Code Online (Sandbox Code Playgroud)
我想知道如何在我的网页上建立这个div超链接,而不必使它成为锚而不是div.
我倾向于使用相当自我记录的void doSomething()方法来实现UI功能,即如果用户按下此按钮然后执行此操作然后启用此列表框,禁用该按钮等.这是最好的方法吗?是否有更好的模式用于一般UI管理,即如何控制何时启用/禁用控件等.等取决于用户输入?
我常常觉得自己正在转向"做一切"反模式的"大班",因为很多人似乎与"主要"形式的班级互动.通常,即使我在类中包含使用相对模块化设计实现的私有状态变量,我仍然发现它增长得如此之快,这是荒谬的.
那么人们可以给我一些很好的建议来制作高质量,可测试,分离的WinForms设计而不会陷入这些陷阱吗?
有没有办法在带有GUID的Windows机器上获取已注册的COM接口列表?
在任何人认为这与编程无关之前,我需要这些数据以便在f#(或C#)中引用tlbimp未暴露的接口的COM接口.
当然,F#和C#都编译成IL而CLR JITter完成了大部分的工作,但是我想知道F#语言或其核心库中是否隐含了与C#相比性能较差的内容?
另外,在.net框架中使用函数式编程有什么东西可能会使它比C#慢吗?
我当然会坐下来测量差异,因为这确实是确定的唯一真正的方法,但我只是想知道是否有人对此话题有任何广泛的了解.
我有一张类似于的表: -
+----+---+---+
| Id | A | B |
+----+---+---+
| 1 | 1 | 2 |
+----+---+---+
| 2 | 2 | 1 |
+----+---+---+
| 3 | 3 | 4 |
+----+---+---+
| 4 | 0 | 5 |
+----+---+---+
| 5 | 5 | 0 |
+----+---+---+
Run Code Online (Sandbox Code Playgroud)
我想删除所有重复的值对,无论哪个列包含哪个值,例如在我想查看的查询之后: -
+----+---+---+
| Id | A | B |
+----+---+---+
| 1 | 1 | 2 |
+----+---+---+
| 3 | 3 | 4 |
+----+---+---+
| 4 …Run Code Online (Sandbox Code Playgroud) 在我正在处理的C#应用程序中,我有一个很长的标识符如下: -
foo.bar.bwah.blah.whatever.very.very.huge
Run Code Online (Sandbox Code Playgroud)
每当我引用这个对象时,这绝对是一场噩梦,不幸的是我确实需要引用它:
var something = foo.bar.bwah.blah.whatever.very.very.huge.a;
var somethingElse = foo.bar.bwah.blah.whatever.very.very.huge.b;
foo.bar.bwah.blah.whatever.very.very.huge.c = 12;
Run Code Online (Sandbox Code Playgroud)
等等
我想使用更小的某种别名来更新此代码,但问题是我想要更改底层引用,并且在没有显式更新别名的情况下也可以使用别名更新.
目前,如果我做以下事项: -
foo.bar.bwah.blah.whatever.very.very.huge.a = "hello";
string shorter = foo.bar.bwah.blah.whatever.very.very.huge.a;
foo.bar.bwah.blah.whatever.very.very.huge.a = "world";
Console.WriteLine(shorter);
Run Code Online (Sandbox Code Playgroud)
它会输出"你好".我想要达到的目标如下: -
foo.bar.bwah.blah.whatever.very.very.huge.a = "hello";
string** shorterPointer = &foo.bar.bwah.blah.whatever.very.very.huge.a;
foo.bar.bwah.blah.whatever.very.very.huge.a = "world";
Console.WriteLine(**shorter);
Run Code Online (Sandbox Code Playgroud)
哪个会根据需要输出"世界".
我相信你可以使用C#中的不安全代码来实现这样的功能,但是我不能这样做,我只能使用安全代码.
有没有人有任何想法我怎么可能实现这一目标?
请注意:这个问题不是关于字符串是不可变的,我知道它们是 - 事实上我认为它们是出于问题的目的.如果我使用其他类型的话可能更简单...所以当我将"hello"分配给a"then"时,我会在每次场合实例化不同的对象,因此我存储的对a的引用在重新生成后变为无效分配.
以下T/SQL: -
create table #temp(foo varchar(10))
insert into #temp select ''
insert into #temp select 'abc'
insert into #temp select ' '
select len(foo) from #temp where foo = ' '
drop table #temp
Run Code Online (Sandbox Code Playgroud)
返回两个0,尽管标准意味着它应该什么都不返回.此外,它返回两个空白行的长度,其中一个确实长度为0,但也是一个长度为1的行,报告长度为0.
有谁知道这里发生了什么?!
c# ×6
.net ×2
com ×2
f# ×2
sql-server ×2
com-interop ×1
css ×1
dll ×1
html ×1
java ×1
performance ×1
sql ×1
t-sql ×1
visitor ×1
winforms ×1