小编Ste*_*sen的帖子

从静态成员访问let bound字段

有没有办法从静态成员访问let绑定字段?以下给出了指示的错误:

type Foo(x) =
    let x = x
    static member test() =
        let foo = Foo(System.DateTime.Now.Month)
        printfn "%A" foo.x //the field, constructor or member 'x' is not defined
        ()
Run Code Online (Sandbox Code Playgroud)

私有显式字段允许从静态成员访问:

type Bar =
    val private x:int
    new(x) = { x=x }
    static member test() =
        let Bar = Bar(System.DateTime.Now.Month)
        printfn "%A" Bar.x
        ()
Run Code Online (Sandbox Code Playgroud)

文档http://msdn.microsoft.com/en-us/library/dd469494.aspx声明"显式字段不适合日常使用",但从静态成员访问私有实例字段当然是一种常规方案.此外,我不相信您可以在主构造函数中设置显式字段,这意味着如果需要从静态成员访问一个私有实例字段,则必须将所有字段移动到显式字段,并且您不能再使用主要构造函数 - 它是全有或全无.

作为真实想要从静态成员访问私有实例字段的实际示例,请考虑一个大整数实现:BigInteger类是不可变的,因此大整数的内部表示将保留为私有实例字段(让我们叫它data).现在,假设您认为Add(other)实例方法不适合不可变数据结构,并且您只想实现静态Add(lhs,rhs)方法:在这种情况下,您需要能够访问lhs.datarhs.data.

f#

9
推荐指数
1
解决办法
1163
查看次数

用Gorm查询列的子集

假设我有以下Domain类:

class Book {
  String title
  String author
  byte[] largeCoverArtImage
}
Run Code Online (Sandbox Code Playgroud)

我有一个列表视图,我不需要显示largeCoverArtImage,如何使用GORM Criteria执行以下SQL查询?

select title, author from Book
Run Code Online (Sandbox Code Playgroud)

grails hibernate grails-orm hibernate-criteria

7
推荐指数
2
解决办法
4989
查看次数

是否可以将模块功能标记为智能感知发现中的"隐藏"?

作为这个问题的后续,我想知道是否有可能将模块中的F#函数(可能是通过属性)标记为Intellisense中的"隐藏".回顾一下,我有一些标记的函数,inline但是根据我不想公开的其他函数实现.因此,虽然实现函数必须保持公开(因为它们被内联),但我记得在过去我遇到过隐藏在Visual Studio Intellisense中的C#方法,但如果你知道它们是什么就编译得很好,但是我不记得确切的方法,我不确定这是某种特殊的Visual Studio事物还是一种可用的功能,如DebuggerBrowsable(DebuggerBrowsableState.Never)意识.

更新:我尝试应用EditorBrowsable(EditorBrowsableState.Never)但它似乎不适用于Visual F#项目.

c# f# visual-studio-2010 visual-studio

7
推荐指数
1
解决办法
512
查看次数

多个返回值的元组或输出参数?

我想从c#中的方法返回多个参数.我只是想知道哪个更好或者是元组?

static void Split (string name, out string firstNames, out string lastName)
{
    int i = name.LastIndexOf (' ');
    firstNames = name.Substring (0, i);
    lastName   = name.Substring (i + 1);
}


static Tuple<string,string> Split (string name)
{
//TODO
}
Run Code Online (Sandbox Code Playgroud)

c#-4.0

6
推荐指数
1
解决办法
1873
查看次数

Can I explicitly check for cancellation/terminate async computation?

I have an async computation like the following (see inline comments):

async {
  //...
  do! Async.Sleep(100) //cancellation may happen during sleep
  //... but isn't checked at the end of the sleep, so regular, non-async computations are executed here 
}
Run Code Online (Sandbox Code Playgroud)

In order to force a cancellation check/terminate the entire async computation before the "regular" computation part is reached, I insert an effective no-op do! Async.Sleep(1) immediately after the do! Async.Sleep(100). Is there a cleaner way to do this? Possibly even …

f# asynchronous

6
推荐指数
1
解决办法
207
查看次数

mysqldump使用数据库名称完全限定触发器

我正在尝试使用mysqldump导出需要使用不同数据库名称导入的数据库.查看mysqldump生成的SQL,看起来触发器是唯一一个完全符合源数据库名称的对象名称,从而扼杀了我的需求.反正有没有指导mysqldump没有完全限定任何对象名称,包括触发器?

mysql database mysqldump database-backups

5
推荐指数
1
解决办法
1406
查看次数

换行符和格式化程序

我最近变得有点自满地写了像

printf "\n%f\n" 3.2
Run Code Online (Sandbox Code Playgroud)

代替

printf "%s%f%s" Environment.NewLine 3.2 Environment.NewLine
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有办法像第一个版本一样编写安全的第二个版本(即格式字符串中的一个特殊字符,它插入Environment.Newline以便不需要格式字符串中每个换行符实例的参数)?

f# string-formatting

5
推荐指数
2
解决办法
4653
查看次数

不使用抽象类而不是接口的原因?

我正在考虑使用一个抽象类与所有抽象成员而不是接口,以避免显式接口实现样板代码.而不是

type IMyInterface =
    abstract Name : string
    abstract Text : string

type MyClass() =
    member __.Name = "name"
    member __.Text = "text"
    interface IMyInterface with
        member this.Name = this.Name
        member this.Text = this.Text
Run Code Online (Sandbox Code Playgroud)

我有

[<AbstractClass>]
type MyAbstractClass() =
    abstract Name : string
    abstract Text : string

type MyClass() = 
    inherit MyAbstractClass()
    override __.Name = "name"
    override __.Text = "text"
Run Code Online (Sandbox Code Playgroud)

我应该在这里注意任何谨慎或含义的话语?

f#

5
推荐指数
1
解决办法
899
查看次数

扩展方法设计指南:对于sub和super类,类似的方法名称应该是相同的吗?

我刚刚阅读了Krzysztof Cwalina和Brad Abrams的框架设计指南第二版中关于扩展成员的部分,并没有找到这样的例子.我的问题涉及F#库中的超类和子类,但我希望答案与所有​​.NET语言相关.

F#有两种类型,super类型Expr和sub类型Expr<'a>,后者只是前者的类型化版本的包装器.这些是用于引用表达式的类型.

如果我想在这些类型上定义扩展方法以进行评估,那么这将是一个更好的设计:

  1. 不要作为F#PowerPack中确实并确定具有不同名称的方法EvalUntyped() : Expr -> objExprEval() : Expr<'a> -> 'aExpr<'a>.
  2. 如果您拥有类型并使用相同的名称(可以将超类型上的方法视为虚拟,并且子类型上的方法可以被认为是覆盖超级虚方法),那么做更接近您将要做的事情).即Eval() : Expr -> objExprEval() : Expr<'a> -> 'aExpr<'a>.

第二个选项对我来说似乎更正确,但是我想遵循可能存在的任何设计准则:是否有任何权威优先权(假设它们在PowerPack中"错误")?

.net f#

5
推荐指数
0
解决办法
169
查看次数

是否有可用于“iex”的 vim 模式

有可用的 vim 模式吗iex?也就是说,类似于set -o vibash 中的东西。

这是我的版本信息:IEx 1.13.0 (compiled with Erlang/OTP 24)

我正在运行它Linux Mint 20.2 Uma

elixir elixir-iex

5
推荐指数
1
解决办法
261
查看次数