gpt4 book ai didi

f# - 是否可以在 f# 中使用 CallerMemberNameAttribute

转载 作者:行者123 更新时间:2023-12-04 00:56:41 25 4
gpt4 key购买 nike

此处注明了属性和 C# 示例,但 FSharp 看起来不可能。

http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.callermembernameattribute.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2

// using System.Runtime.CompilerServices 
// using System.Diagnostics;

public void DoProcessing()
{
TraceMessage("Something happened.");
}

public void TraceMessage(string message,
[CallerMemberName] string memberName = "",
[CallerFilePath] string sourceFilePath = "",
[CallerLineNumber] int sourceLineNumber = 0)
{
Trace.WriteLine("message: " + message);
Trace.WriteLine("member name: " + memberName);
Trace.WriteLine("source file path: " + sourceFilePath);
Trace.WriteLine("source line number: " + sourceLineNumber);
}

示例输出:
message: Something happened. 
member name: DoProcessing
source file path: c:\Users\username\Documents\Visual Studio 2012\Projects\CallerInfoCS\CallerInfoCS\Form1.cs
source line number: 31

是否可以在 F# 中执行上述操作,如果可以,表示法是什么?

最佳答案

快速搜索 compiler source code显示名称 CallerMemberName没有出现在代码的任何地方,所以我认为这个功能不受支持。 (你当然可以用属性标记一个参数,但这些属性是特殊的——它们指示编译器而不是在运行时以某种方式被发现和使用。)

2016 年 7 月更新 :截至6月下旬,F# now supports CallerLineNumberCallerFilePath ,但是 CallerMemberName仍然缺席。不幸的是,似乎特别是一个更难以实现。

在相关说明中,F# 有一个 few special identifiers可以让您获得当前的源文件名和行号,因此您可能可以通过 __SOURCE_DIRECTORY__ 获得类似的信息。和 __LINE__(但不是像 C# 那样来自调用者)。

关于f# - 是否可以在 f# 中使用 CallerMemberNameAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14117842/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com