我想要一些方法来定义相关记录.例如,
type Thing = { field1: string; field2: float }
type ThingRecord = { field1: string; field2: float; id: int; created: DateTime }
Run Code Online (Sandbox Code Playgroud)
要么
type UserProfile = { username: string; name: string; address: string }
type NewUserReq = { username: string; name: string; address: string; password: string }
type UserRecord = { username: string; name: string; address: string; encryptedPwd: string; salt: string }
Run Code Online (Sandbox Code Playgroud)
以及从一个转换到另一个的方式,而不需要写那么多样板文件.即使是第一个完整的例子也是:
type Thing =
{ field1: string
field2: float }
with
member this.toThingRecord(id, created) =
{ field1 …Run Code Online (Sandbox Code Playgroud) 看起来这两种语言都被称为"C#应该是什么",使用hygenic宏,REPL,Compiler作为Serivce(CaaS),静态+鸭子打字(C#之前的方式).这两种语言之间是否有任何重大差异,或者它们只是两种不同的实现,或多或少相同的东西?我在某地读过Nemerle的宏观服务比Boo更强大; 这是真的?
他们如何在当前活动,成熟度和IDE集成方面进行比较?
此外,C#5.0传闻的CaaS功能是否可能会使它们过时,如果它实现,或者是否有能够使它们保持相关的功能?
只是坐着没有请求,我得到内存不断增加,最终超出内存配额.我不明白有很多事情.
JAVA_OPTS: -Xmx384m -Xss512k -XX:+UseCompressedOops -javaagent:heroku-javaagent-1.2.jar=stdout=true?以下是日志文件的示例
app/web.1: heroku-javaagent: JVM Memory Usage (Heap): used: 275M committed: 349M max:349M
app/web.1: heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M
app/web.1: heroku-javaagent: JVM Threads : total: 37 daemon: 7 non-daemon: 21 internal: 9
app/web.1: heroku-javaagent: JVM Memory Usage (Heap): used: 276M committed: 349M max:349M
app/web.1: heroku-javaagent: JVM Memory Usage (Non-Heap): used: 37M committed: 37M max:219M
app/web.1: heroku-javaagent: JVM Threads : total: 37 daemon: 7 non-daemon: 21 internal: …Run Code Online (Sandbox Code Playgroud) 我看到一些例子表明我们可以在clojure中得到一个很好的头/尾解构序列,如下所示:
(if-let [[x & xs] (seq coll)]
Run Code Online (Sandbox Code Playgroud)
但是我认为这对延迟序列不起作用,因为这会将值放入一个不是惰性的向量中.我尝试将矢量形式更改为列表形式,它给了我绑定错误,引用与否.
没有像这样的绑定,似乎如果我有一个懒惰的序列,其中每个元素是前一个元素的计算密集型方程式,我必须做两次计算才能将头部和尾部作为单独的语句,对?
(let [head (first my-lazy-seq) ;; has to calculate the value of head.
tail (rest my-lazy-seq)] ;; also has to calculate the value of head to prepare the rest of the sequence.
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题,或者我在某个地方做出了错误的假设?
我有两个期货可以解决布尔.我基本上想做点什么
(if (or @future1 @future2)
...)
Run Code Online (Sandbox Code Playgroud)
但是,通过优化,无论哪一个完成,如果它是真的,那么我不等待剩余的未来完成; 去吧.当然,如果值为false,则等待剩余的未来完成.有这么简单的方法吗?
如果STM事务失败并重试,是否writeTChan重新执行调用以便最终进行两次写入,或者如果事务提交,STM是否仅实际执行写入?也就是说,睡眠理发师问题的解决方案是否有效,或者如果enterShop第一次交易失败,客户可能会获得两次折扣?
import Control.Monad
import Control.Concurrent
import Control.Concurrent.STM
import System.Random
import Text.Printf
runBarber :: TChan Int -> TVar Int -> IO ()
runBarber haircutRequestChan seatsLeftVar = forever $ do
customerId <- atomically $ readTChan haircutRequestChan
atomically $ do
seatsLeft <- readTVar seatsLeftVar
writeTVar seatsLeftVar $ seatsLeft + 1
putStrLn $ printf "%d started cutting" customerId
delay <- randomRIO (1,700)
threadDelay delay
putStrLn $ printf "%d finished cutting" customerId
enterShop :: TChan Int -> TVar Int -> Int …Run Code Online (Sandbox Code Playgroud) 我知道有一个后管(<|)操作员,在其他几个SO答案中引用.但是当与前管相结合时(|>),这种方法效果不佳,这在链接中很常见.但是我正在寻找相关的选择.基本上是否有以下功能定义的内置版本?或者这是一个坏/危险的做法?
let inline (^%) f = f
let stuff =
[1;2;3]
|> Seq.filter ^% (>) 2
|> Seq.map ^% fun x -> x.ToString()
// compare to this, which doesn't compile (and would be hard to follow even if it did)
let stuff =
[1;2;3]
|> Seq.filter <| (>) 2
|> Seq.map <| fun x -> x.ToString()
Run Code Online (Sandbox Code Playgroud) 我有一个C#extern声明,如下所示:
[DllImport("something.dll")]
public static extern ReturnCode GetParent(IntPtr inRef, out IntPtr outParentRef);
Run Code Online (Sandbox Code Playgroud)
如何将其翻译为F#?
C#不允许lambda函数表示迭代器块(例如,lambda函数内不允许"yield return").如果我想创建一个懒惰的枚举,例如在枚举时产生所有驱动器,我想做类似的事情
IEnumerable<DriveInfo> drives = {foreach (var drive in DriveInfo.GetDrives())
yield return drive;};
Run Code Online (Sandbox Code Playgroud)
花了一段时间,但我认为这是获得该功能的一种方式:
var drives = Enumerable.Range(0, 1).SelectMany(_ => DriveInfo.GetDrives());
Run Code Online (Sandbox Code Playgroud)
有更惯用的方式吗?
我正在尝试制作一个加载全屏的WPF应用程序,并让F11键在全屏和窗口之间切换.
使用以下代码,它首先在全屏模式下正确显示在屏幕上.切换将其拉回到常规窗口.
然后随后的切换它几乎进入全屏模式但似乎向上移动了~10像素,因此任务栏的一半是可见的.我能够在一个空主窗口的新WPF项目中重现这一点.
public partial class MainWindow : Window {
public MainWindow() {
InitializeComponent();
this.WindowState = WindowState.Maximized;
this.WindowStyle = WindowStyle.None;
this.ResizeMode = ResizeMode.NoResize;
this.Topmost = true;
this.PreviewKeyDown +=
(s, e) => {
if (e.Key == Key.F11) {
if (this.WindowStyle == WindowStyle.None) {
this.WindowState = WindowState.Normal;
this.WindowStyle = WindowStyle.SingleBorderWindow;
this.ResizeMode = ResizeMode.CanResize;
this.Topmost = false;
} else {
this.WindowState = WindowState.Maximized;
this.WindowStyle = WindowStyle.None;
this.ResizeMode = ResizeMode.NoResize;
this.Topmost = true;
}
}
};
}
}
Run Code Online (Sandbox Code Playgroud)
这是框架中的错误吗?我无法想象它会被忽视直到现在,但我不知道我做错了什么.这些是应该完成工作的属性,它们几乎可以工作但不完全.我试过搞乱其他Window …