有没有办法,在C#中,一个类或方法知道谁(即什么类/方法)调用它?
例如,我可能有
class a{
public void test(){
b temp = new b();
string output = temp.run();
}
}
class b{
public string run(){
**CODE HERE**
}
}
Run Code Online (Sandbox Code Playgroud)
输出:"由'a'类的'test'方法调用."
我正在写一个小型的只读FTP服务器.客户说"给我那个文件",我的服务器发送它.
是否有任何标准方式(库函数?!?)以确保所请求的文件不是"../../../../../etc/passwd"或任何其他不好的东西?如果我可以将所有查询限制到目录(及其子目录),那将是很棒的.
谢谢!
假设我正在定义一个Haskell函数f(纯函数或动作),并且在f I函数g中调用函数g.例如:
f = ...
g someParms
...
Run Code Online (Sandbox Code Playgroud)
如何用模拟版本替换函数g进行单元测试?
如果我在Java中工作,g将是SomeServiceImpl实现接口的类的方法SomeService.然后,我使用依赖注入告诉f要么使用SomeServiceImpl或MockSomeServiceImpl.我不知道如何在Haskell中做到这一点.
是介绍类型SomeService的最佳方法:
class SomeService a where
g :: a -> typeOfSomeParms -> gReturnType
data SomeServiceImpl = SomeServiceImpl
data MockSomeServiceImpl = MockSomeServiceImpl
instance SomeService SomeServiceImpl where
g _ someParms = ... -- real implementation of g
instance SomeService MockSomeServiceImpl where
g _ someParms = ... -- mock implementation of g
Run Code Online (Sandbox Code Playgroud)
然后,重新定义f如下:
f someService ... = ...
g someService someParms
...
Run Code Online (Sandbox Code Playgroud)
看起来这样可行,但我只是在学习Haskell并想知道这是否是最好的方法呢?更一般地说,我喜欢依赖注入的想法,不仅仅是为了模拟,而且还使代码更具可定制性和可重用性.通常,我喜欢不被锁定到一段代码使用的任何服务的单个实现中的想法.在代码中广泛使用上述技巧以获得依赖注入的好处是否被认为是一个好主意?
编辑:
让我们更进一步.假设我在一个模块中有一系列函数a,b,c,d,e和f,它们都需要能够从不同的模块引用函数g,h,i和j.并且假设我想能够模拟函数g,h,i和j.我可以清楚地将4个函数作为参数传递给af,但是将4个参数添加到所有函数中会有点痛苦.另外,如果我需要更改任何af的实现以调用另一种方法,我需要更改其签名,这可能会产生令人讨厌的重构练习.
使这种情况变得容易的任何技巧?例如,在Java中,我可以使用其所有外部服务构造一个对象.构造函数会将服务存储在成员变量中.然后,任何方法都可以通过成员变量访问这些服务.因此,随着方法被添加到服务中,方法签名都不会改变.如果需要新服务,则只会更改构造函数方法签名.
今天我的问题很简单:为什么编译器不能从类构造函数中推断模板参数,就像它可以从函数参数那样做?例如,为什么以下代码无效:
template<typename obj>
class Variable {
obj data;
public: Variable(obj d)
{
data = d;
}
};
int main()
{
int num = 2;
Variable var(num); //would be equivalent to Variable<int> var(num),
return 0; //but actually a compile error
}
Run Code Online (Sandbox Code Playgroud)
正如我所说,我明白这是无效的,所以我的问题是为什么不是呢?允许这会产生任何重大的句法漏洞吗?是否存在不希望使用此功能的实例(推断类型会导致问题)?我只是想了解允许函数的模板推理背后的逻辑,但不适用于适当构造的类.
我试图为我在1到60之间选择的每一行生成一个随机整数作为计时器.
SELECT downloads.date, products.*, (FLOOR(1 + RAND() * 60)) AS timer
Run Code Online (Sandbox Code Playgroud)
我已经搜索并继续使用FLOOR函数作为如何选择范围内的随机整数.这给了我每一行1.我错过了什么?
我在mysql 5.0.75上
继续查询的其余部分我相信它可能是一个嵌套问题
SELECT *
FROM (
SELECT downloads.date, products.*, FLOOR(1 + (RAND() * 60)) AS randomtimer,
(
SELECT COUNT( * )
FROM distros
WHERE distros.product_id = products.product_id
) AS distro_count,
(SELECT COUNT(*) FROM downloads WHERE downloads.product_id = products.product_id) AS true_downloads
FROM downloads
INNER JOIN products ON downloads.product_id = downloads.product_id
) AS count_table
WHERE count_table.distro_count > 0
AND count_table.active = 1
ORDER BY count_table.randomtimer , count_table.date DESC LIMIT …Run Code Online (Sandbox Code Playgroud) 不久前,iPhone开发非常简单,只有少数操作系统版本甚至更少的设备.
然而,现在有两个主要的操作系统版本和5个不同的设备需要考虑.
作为一家即将发布的应用程序测试公司已成为越来越多的问题.
测试所有组合的最佳方法是什么,我是否需要购买每一代iPhone和iPod Touch?是否存在我可能需要编写的特定硬件/操作系统组合的问题?
我想我的问题是,"覆盖所有基地所需的最低测试量是多少?"
在我的Django应用程序中,我从作为字符串提供的web服务中获取时间,我在模板中使用:
{{date.string}}
Run Code Online (Sandbox Code Playgroud)
这为我提供了一个日期,例如:
2009-06-11 17:02:09+0000
Run Code Online (Sandbox Code Playgroud)
这些显然有点难看,我想以一种很好的格式向我的用户展示它们.Django有一个很棒的内置日期格式化程序,可以完全按照我想要的方式执行:
{{ value|date:"D d M Y" }}
Run Code Online (Sandbox Code Playgroud)
但是,这要求将值作为日期对象提供,而不是字符串.所以我不能用它来格式化它.在这里搜索StackOverflow pythons strptime似乎做我想要的,但对Python来说相当新我想知道是否有人能想出一个更简单的方法来使用字符串获取日期格式,而不必诉诸于编写一个全新的自定义strptime模板标签?
我只是安装了一个宝石,但是当我输入时
gem_name --help
Run Code Online (Sandbox Code Playgroud)
它说:
'gem_name' is not recognized as an internal or external command
Run Code Online (Sandbox Code Playgroud)
但是,当我输入
gem list --local
Run Code Online (Sandbox Code Playgroud)
宝石出现在列表中,所以我知道它就在那里 - 我只是不知道如何看待它的作用.
是否有不同的指令用于找出此gem提供的命令?
我正在寻找一篇文章,深入探讨ASP.NET的工作原理以及它如何从XML标记中呈现控件.例如,在幕后,ASP.NET如何采用以下标记并让它产生我们看到的结果?
<asp:Label ID="MyLabel"><%= myObject.Text%></asp:Label>Run Code Online (Sandbox Code Playgroud)
有没有人知道任何会深入探讨ASP.NET内部工作的文章?
如今,使用C++而不是托管语言的主要原因是为了获得C++带来的好处.C++的支柱之一是"你不为你不需要的东西买单".可以说有时候你不想支付与C的向后兼容性.许多奇怪的C++怪癖可以归结为这种向后兼容性.还有哪些其他语言,"你不为你不需要的东西买单",包括向后兼容C?
编辑/澄清:对我来说,真正的杀手是第二句话.是否有一种真正设计的语言,并没有强加你不想要的代码?C++将其作为其设计理念:不想要RTTI?它不存在.不想要垃圾收集?它不在那里.C++的问题在于它(IMO)在拒绝与过去相冲突时违反了这一要求.我不希望与20岁代码的向后兼容性阻碍我的前进.C++不愿意这样做.什么是/有?
编辑2:我想我应该更清楚一下成本是多少.有多种潜在成本.我最初关注的是运行时成本.
在C++中,通过虚方法的多态性有成本.但并非所有方法都支付这笔费用.调用非虚拟C++方法,其运行时成本与普通旧C函数(具有至少一个参数)相同.C++不要求您使用多态.在其他OOP语言中,所有方法都是虚拟的,因此无法避免多态性的成本.
运行时成本是最重要的,但其他成本可以减轻这种影响.汇编语言显然会有最少的运行时开销,但汇编语言的编写和维护成本是一个巨大的打击.
考虑到这一点,我们的想法是找到提供有用抽象的语言,这些抽象在不使用时不会影响运行时成本.