有没有办法在Ruby中实现mixin或在F#中实现Scala中的特性?
我想要的是基本上将一个模块复制到另一个模块,以便它共享其他模块功能但是关闭以进行修改.或者,一个OOP的思考方式,我想要多重继承,除了父对象不能被修改.
我有一个结构,有一个字段叫 type
我如何在F#中访问它?
C#
struct A {
int type;
}
Run Code Online (Sandbox Code Playgroud)
F#
let a = A()
let myThing = a.type //error because type is a reserved keyword
Run Code Online (Sandbox Code Playgroud)
我如何访问该type领域A?
鉴于地图:
let myMap = Map.ofArray [| (1,"A");(2,"B") |]
Run Code Online (Sandbox Code Playgroud)
有没有办法可以使用类似于列表合并运算符的模式匹配?
像这样的东西:
match myMap with //doesn't work
(1, value) -> ()
| _ -> ()
Run Code Online (Sandbox Code Playgroud)
要么:
match myMap with //doesn't work
1::value -> ()
| _ -> ()
Run Code Online (Sandbox Code Playgroud)
我不想做的是这样的:
match myMap.TryFind(1) with //boring
Some value -> ()
| _ -> ()
Run Code Online (Sandbox Code Playgroud)
如何与地图进行模式匹配?
我想以一种很酷的方式否定函数的返回值.
鉴于此功能:
let yes = fun() -> true
Run Code Online (Sandbox Code Playgroud)
我想实施no作为否定的肯定
let no = not yes //doesn't work
Run Code Online (Sandbox Code Playgroud)
F#中是否存在任何类型的合成糖以使其成为可能?
PS我不是在找这个:
let no = fun() -> not yes() // boring
Run Code Online (Sandbox Code Playgroud) 我想创建自己的自定义集合类型.
我将我的收藏定义为:
type A(collection : seq<string>) =
member this.Collection with get() = collection
interface seq<string> with
member this.GetEnumerator() = this.Collection.GetEnumerator()
Run Code Online (Sandbox Code Playgroud)
但这不编译 No implementation was given for 'Collections.IEnumerable.GetEnumerator()
我该怎么做呢?
鉴于我有一个枚举:
type Cool = A = 'a'
| B = 'b'
Run Code Online (Sandbox Code Playgroud)
我试着像这样打印它
printf "%A" Cool.A
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
ToString异常:传入的值必须是枚举基础或枚举的基础类型,例如Int32.参数名称:value
为什么会发生这种情况并且(如果可能的话)我如何在枚举级别修复此问题?
可能重复:
在Java中,最终会返回特朗普吗?
这个函数返回什么?
public int wasExceptionThrown() {
try {
if(1==1)
throw new RuntimeException();
return 1;
} catch(Exception e) {
return 2;
} finally {
return 3;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我遵守一系列承诺:
this.getData.then(this.getMoreData).then(this.getEvenMoreData);
Run Code Online (Sandbox Code Playgroud)
在某个时候,用户可以决定取消请求并请求其他请求。
如何取消链条的传播?
我正在尝试使用F#交互式控制台打印一个int.
let x = sprintf "%d", 3
printf x
Run Code Online (Sandbox Code Playgroud)
得到:
stdin(12,8):错误FS0001:类型'(int - > string)*System.Numerics.BigIntege r'与'Printf.TextWriterFormat <'a>'类型不兼容
我究竟做错了什么?