我偶然发现了一些"奇怪的行为".我使用F#interactive来测试一些代码并编写
Seq.zip "ACT" "GGA" |> Seq.map ((<||) compare)
// val it : seq<int> = seq [-1; -1; 1]
Run Code Online (Sandbox Code Playgroud)
然后我想用它制作一个函数并写下来
let compute xs ys = Seq.zip xs ys |> Seq.map ((<||) compare)
// val compute : xs:seq<'a> -> xs:seq<'a> -> seq<int> when 'a : comparison
Run Code Online (Sandbox Code Playgroud)
这推广了第一段代码,我认为这是件好事......直到我尝试使用它
compute "ACT" "GGA"
// val it : seq<int> = seq [-6; -4; 19]
Run Code Online (Sandbox Code Playgroud)
因此,compare当存在不同的"观点"(显式类型与泛型)时,以某种方式对"相同的事物"采取不同的行为
我知道如何解决它:要么通过明确的类型
let compute (xs: #seq<char>) // ... or char seq or string
Run Code Online (Sandbox Code Playgroud)
或者保持类型通用并与sign函数组合
let compute (* ... …Run Code Online (Sandbox Code Playgroud) 是否存在类似Either的标准和类型,但有3种情况?Haskell有,These但不是那样.
这不是关于Windows窗体,它只是针对"背景".
当我遇到AddRange一个MenuStrip.Items需要ToolStripMenuItem投入的错误时,我正在玩Windows FormsToolStripItem
但是我已经有AddRange一个Form.Controls之前并不要求强制转换.
经过一些实验后,我设法发现当有多个重载时发生错误,AddRange所以我试图验证我的想法:
type Foo () = class end
type Bar () = inherit Foo ()
type FooCollection () = class end // not really necessary
type Test1 () =
member __.AddRange (col: FooCollection) = () // could be an int or anything instead
member __.AddRange (foos: Foo []) = ()
type Test2 () = member __.AddRange (foos: Foo []) = ()
let lst1, lst2 …Run Code Online (Sandbox Code Playgroud) 问题:返回所有记录where Jon Doe =<bus_contact> 或 <bus_sponsor>.
当前代码返回记录1,因此仅使用一个查询返回记录1和2需要进行哪些修改?
XML
<root>
<row>
<project_id>1</project_id>
<project_name>Name1</project_name>
<bus_contact>Jon Doe</bus_contact>
<bus_sponsor>Bruce Wayne</bus_sponsor>
</row>
<row>
<project_id>2</project_id>
<project_name>Name2</project_name>
<bus_contact>Peter Parker</bus_contact>
<bus_sponsor>Jon Doe</bus_sponsor>
</row>
</root>
Run Code Online (Sandbox Code Playgroud)
C#
class Program
{
static void Main (string[] args)
{
XElement main = XElement.Load ("master_list.xml");
var results = main.Descendants ("row")
.Descendants ("bus_contact")
.Where (e => e.Value == "Jon Doe")
.Select (e => e.Parent)
.Select (e => new {
project_id = e.Descendants ("project_id").FirstOrDefault ().Value,
project_name = e.Descendants ("project_name").FirstOrDefault ().Value
});
foreach (var result …Run Code Online (Sandbox Code Playgroud) f# ×3
c# ×1
casting ×1
comparison ×1
generics ×1
haskell ×1
linq ×1
ocaml ×1
overloading ×1
scala ×1
typescript ×1
xml ×1