我理解这是一个主观问题,所以如果需要关闭我会道歉,但我觉得它经常足以让我想知道是否一般偏好一种形式而不是另一种形式.
显然,最好的答案是"重构代码,这样你就不需要测试虚假",但有时候没有简单的方法可以这样做,而"else"分支就是继续处理.因此,当您必须具有"if not false"构造时,这是首选标准:
不是运营商
if (!value)
Run Code Online (Sandbox Code Playgroud)
或者测试是假的
if (value == false)
Run Code Online (Sandbox Code Playgroud) 我正在尝试将Haskell核心库的Arrows转换为F#(我认为这对于更好地理解Arrows和F#是一个很好的练习,我可能能够在我正在开发的项目中使用它们.)但是,直接翻译由于范式的不同,是不可能的.Haskell使用类型类来表达这些东西,但我不确定F#构造最好用F#的习语映射类型类的功能.我有一些想法,但最好把它提到这里,看看哪些被认为是最接近的功能.
对于tl; dr crowd:我如何将类型类(一个Haskell成语)翻译成F#惯用代码?
对于那些接受我长篇解释的人:
来自Haskell标准库的代码是我正在尝试翻译的一个例子:
class Category cat where
id :: cat a a
comp :: cat a b -> cat b c -> cat a c
class Category a => Arrow a where
arr :: (b -> c) -> a b c
first :: a b c -> a (b,d) (c,d)
instance Category (->) where
id f = f
instance Arrow (->) where
arr f = f
first f = f *** id
Run Code Online (Sandbox Code Playgroud)
尝试1:模块,简单类型,让绑定
我的第一个镜头是直接使用模块组织来映射事物,例如:
type Arrow<'a,'b> …Run Code Online (Sandbox Code Playgroud) 最近,我一直在想,我想尝试一些新的想法和一种新的Web应用程序设计方法.我大多习惯使用ASP.NET(.NET 2.0),但我也玩过一些ASP.NET MVC库.虽然两者都很强大而且很有趣,但我真的更喜欢更基本的东西.
那里有类似的东西吗?我想要一个更透明的框架:我希望能够看到请求,将其传递到我想要的地方,以我想要的方式呈现HTML,并发布请求我想要的方式.我可以在ASP.NET中获得所有这些,但我必须非常努力地去挖掘它.我想用一些简单的东西作为一些新框架思想的基础.
那里有类似的东西吗?或者我是否必须完全重新发明所有基本的路由,请求和响应代码以及从中获得一个平台?
这不是很好的递归吗?
我的外部驱动器上有一个可移植的命令提示符,它有一个很好的.bat文件来配置一些初始设置,但我还想要更多!
这是我知道如何从.bat设置的内容:
所以这一切都很棒.但是有一些设置我似乎无法从蝙蝠设置.比如,如何使用"属性"对话框设置它们:
我正在研究F#中的Arrows,我想创建一个***运算符.但是,我注意到,(***)在函数定义中表示运算符的必要方法与F#块注释语法重叠.那么你怎么能真正表达这个呢?
我想也许,.***.但我认为这实际上将点作为操作员的一部分,我宁愿避免.
关于拥有USB闪存设备,我最喜欢的一件事就是随身携带一堆有用的工具.我想写一些工具,让它们在这种环境中运行良好.我知道C#最好,而且我很有效率,所以我可以立即获得一个Windows窗体应用程序.
但是在制作便携式应用程序时应该考虑哪些因素?我能想到的一些,但不知道答案:
1)语言可移植性 - 好的,我知道我使用它的任何机器都需要安装.NET运行时.但由于我经常只使用几台Windows机器,这应该不是问题.我可以使用另一种语言对其进行编码,但后来我失去了生产力,特别是在简单的表单设计器方面.从闪存驱动器运行.NET应用程序还有其他问题吗?
2)读/写周期 - 在C#中,如何确保我的应用程序没有不必要地写入驱动器?我是否始终控制写入,或者是否需要考虑"隐藏写入"?
3)开放式问题:我应该注意哪些与便携式应用程序有关的其他问题,或者对具有良好IDE的其他语言的建议是否会使我获得类似的生产力水平但更好的可移植性?
据我所知,"Shift","Alt"和"Control"的概念很好地通过键盘本身直接通过OS API进行编码.有时我看到Windows键用作修饰符,但它似乎没有注册为"真正的"修饰键,比键盘上的任何键都要多.
但是一个人可以添加一个新的修饰键吗?也许在疯狂而疯狂的努力带回空间军校学生键盘?除了物理修改的键盘(或者只是重新映射一些未使用的键),还需要什么:新的驱动程序?新的API调用?完全重写操作系统?
我想这种事情在开源操作系统上比在Windows上要容易得多,是吗?
一位开发人员最近向我展示了一篇博文,其中有一个很好的可视化表示git布局.他暗示这种特殊的策略越来越受欢迎,但是在这里以及谷歌的大量搜索还没有出现在博客文章中.
它的要点是你有一个用于主要开发的主干,以及一个用于即时客户驱动的错误修复的"主干".主要开发有一个分支,定期合并到主干发布主要版本,然后你有功能分支.有一个可爱的图表清楚地显示了这一切.
既然我想更好地学习git,我很乐意将这个图作为助手.它也可以作为试图说服同事切换到git的视觉效果.有没有人碰巧知道我在说什么,可以提供链接?
编辑:我现在意识到我的标题对内容有点误导.如果有人想发布git分支的其他策略,他们也会受到赞赏.
我一直在关注L.in.oleum,并对它的高级构造(循环,动态变量)与低级汇编程序功能(寄存器)的混合感兴趣.
还有像Lino这样的其他语言,它将汇编程序的速度与提高生产力的功能相结合吗?
编辑:我意识到这种声音就像广告.我真的对其他汇编语言感兴趣,Lino是我碰巧知道的唯一一个.
在我看来,如果你在更新语句中有相互依赖的字段,我不确定是否可以保证订购(或者需要!).
例如,假设您有以下更新:
UPDATE Table
SET NewValue = OldValue, OldValue = NULL
Run Code Online (Sandbox Code Playgroud)
NewValue会不会先更新,然后OldValue会被取消?或者是在处理期间行(或集合,或表等)的状态是不可变的,以便在计算更改之前不会提交所有更改?
我以为我会和F#相处得很好,因为我在Haskell很体面,但我觉得我被一些简单的问题所困扰.我有一些简单的JSON解析器的解析代码,如下所示:
let rec parseObject tokens = function
| '"' :: cs -> parseString tokens cs
| ':' :: cs -> parseValue tokens cs
| '}' :: cs -> tokens, cs
...
let rec parseValue tokens = function
| c :: cs when Char.IsWhiteSpace(c) -> parseValue tokens cs
| '{' :: cs -> parseObject tokens cs
...
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为parseObject不知道parseValue.不能扭转他们或我会遇到相反的问题.那我该怎么办呢?
我正在Pharo做一个简单的棋盘游戏,我在我的棋盘上有一个方法可以在一个单元格中添加对象.单元格只是对象上的点的字典.
作为该方法的一部分,我想强制一个Point应该大于零,但小于板的宽度和高度,换句话说,它应该实际上在板上.做这个的最好方式是什么?
我目前的尝试看起来像这样:
at: aPoint put: aCell
((((aPoint x > self numberOfRows)
or: [aPoint x <= 0])
or: [aPoint y > self numberOfColumns ])
or: [aPoint y <= 0])
ifTrue: [ self error:'The point must be inside the grid.' ].
self cells at: aPoint put: aCell .
Run Code Online (Sandbox Code Playgroud)
所有那些parens的lisp-y!但是我不能在or:没有关闭每个表达式的情况下使用短路,因此它评估为布尔值而不是块(或作为or:or:or:or:消息).我可以使用二元运算符|代替和for-go短路,但这似乎不对.
那么正确的Smalltalk-ish处理这个问题的方法是什么?
在执行大量ASP.NET页面(.NET 2.0)时,我的代码隐藏通常包含页面对象上的事件处理程序.GridView_RowCommand,Button_Click等所有常见的嫌疑人.所有EventHandler派生的东西都有一个共同点,那就是他们的第一个参数是一个对象,通常标记为"sender".
在ASP.NET代码隐藏中,我真的没有看到它的重点.如果我有GridCustomers_RowCommand并且我需要对GridCustomers做一些事情,我可以从代码隐藏中访问它而不是担心将发送者强制转换为gridview然后使用它.
我觉得我必须在这里错过一个非常重要的设计考虑因素.我对我的代码做了些什么吗?我有点可以看到,使用直接引用这种方式成为全局对象的牺牲品,但这就是ASP.NET的工作原理!我在这里看不到什么?是否有一些精湛的书籍或教程,以"正确的方式"展示如何使用ASP.NET?干净,敏捷,"真正的编码器"方式?
c# ×3
f# ×3
asp.net ×2
arrows ×1
asp.net-2.0 ×1
assembly ×1
blogs ×1
cmd ×1
command-line ×1
drivers ×1
git ×1
haskell ×1
keyboard ×1
layout ×1
modifier-key ×1
not-operator ×1
oop ×1
operators ×1
pharo ×1
portability ×1
smalltalk ×1
sql ×1
sql-server ×1
structure ×1
typeclass ×1
usb ×1
windows ×1