let (->>>) lst exp = for i in lst do exp
let result = [0..5] ->>> ([1..5] ->>> printf "hi")
let result2 = for i in [0..5] do for x in [1..5] do printf "hi"
Run Code Online (Sandbox Code Playgroud)
我期待result并result2做同样的事情.但结果打印只需一次.result2但是,打印30次.这里缺少什么?
我一直在SO和其他来源上搜索此事,但我无法解决这个问题.使用rvalues和xvalues的资源对C++来说有点新(使用C++ 11).
现在,我们 - C程序员 - 错过了什么吗?或者C中有相应的技术可以从这些资源效率中受益?
编辑:这个问题不是基于意见.我无法描述我的问题.我要问的是c中是否有相应的技术.
例如
myEnumerable.Where(v => v != myDictionary["someKey"])
Run Code Online (Sandbox Code Playgroud)
调用此查询时是myDictionary["someKey"]执行语句(意味着查询字典的字典)还是myDictionary["someKey"]
在第一次迭代后使用结果?
我想了解pthread.
但是,需要创建如下的线程方法:
void *SomeMethod(void* x)
{
//Do Something
}
Run Code Online (Sandbox Code Playgroud)
为什么有必要创建一个接受void指针的函数?我们不能使用像这样的函数的pthread吗?
void SomeMethod()
{
}
Run Code Online (Sandbox Code Playgroud) 我试图简化代码.如下.
type myClass() =
member this.Member1 = MyCSharpNameSpace.MyClass("param")
let myObj = myClass()
let myVal = myObj.Member1.MyMethod()
Run Code Online (Sandbox Code Playgroud)
MyClass是一个C#类.当我调用成员的方法时,它会被重新初始化.因为我尝试了以下操作来查看是否存在.
type myClass() =
member this.Member1 =
printfn "Reinitializing"
MyCSharpNameSpace.MyClass("param")
Run Code Online (Sandbox Code Playgroud)
为什么这样做?我认为在调用值后调用一个函数,第二次调用它时函数不会被评估.
在zflog库中,我看到了这段代码
static char* lvl_char(const int lvl)
{
switch (lvl)
{
case ZF_LOG_VERBOSE:
return "VERBOSE\0";
case ZF_LOG_DEBUG:
return "DEBUG\0";
case ZF_LOG_INFO:
return "INFO\0";
case ZF_LOG_WARN:
return "WARN\0";
case ZF_LOG_ERROR:
return "ERROR\0";
case ZF_LOG_FATAL:
return "FATAL\0";
default:
ASSERT_UNREACHABLE("Bad log level");
return "?\0";
}
}
Run Code Online (Sandbox Code Playgroud)
这对我来说似乎很奇怪.我们真的可以从静态函数返回一个本地c字符串吗?
我有带有接口和抽象类的以下代码。
type INode<'a> =
abstract member Parent:INode<'a>
abstract member Evaluate:unit->'a
abstract member Clone:INode<'a> -> INode<'a>
abstract member SelectRandom:int->INode<'a> option
[<AbstractClass>]
type TerminalNode<'a>() =
interface INode<'a> with
member this.SelectRandom indexOfCurrentNode =
let p = 1.0 / float indexOfCurrentNode
if Random().NextDouble() < p then Some (this:>INode<'a>) else None
Run Code Online (Sandbox Code Playgroud)
我想在其中实现层次结构
但是编译器抱怨应该实现该接口的所有方法。
创建实现一个接口并实现该接口的一个方法而使其他方法保持抽象的Abstract类的正确方法是什么?
注意:如果看不到图像,则说明您的网络阻止了imgur.com。
如果我们使类的所有方法(通常返回void的方法)返回类(或子类)的实例,是否存在任何性能或设计问题?
编辑:实际上我并没有考虑构建器模式.我只是在探索流畅的api设计.
这是界面
public interface ITransporter
{
TransporterType TransporterType { get; set; }
TransportActionResults BeginTransport(
Project sourceProject,
ProjectBase targetProject);
bool CheckTargetExists(ProjectBase project);
}
Run Code Online (Sandbox Code Playgroud)
这ProjectBase是所有类型的项目类的抽象类。这是实现ITransporter接口的类中的方法。
public class LocalTransporter : ITransporter
{
public TransportActionResults BeginTransport(
Project sourceProject,
TargetLocalProject targetProject)
{
return TransportActionResults.Success;
}
Run Code Online (Sandbox Code Playgroud)
这个TargetLocalProject类继承自ProjectBase类。但是,我收到一条错误消息,指出“LocalTransporter 类未实现接口成员”并指向该BeginTransport方法。
这是我的问题。我需要BeginTransport使用基类来实现接口的方法,ProjectBase因为从基类继承了几个不同的项目类,我们不知道将使用哪一个。
此外,有几种不同的Transporter类型,因此我需要使用 interface 与它进行交互ITransporter。
注意:我考虑使用ProjectBase而不是实现方法,TargetLocalProject但是当LocalTransporter直接使用(而不是通过接口)时,参数的类型应该是特定的项目类型而不是基类。
我希望我说清楚了。那么,有没有办法在接口中使用基类但在实现的方法中使用子类来实现这个接口方法?