我有两个origin具有只读权限的遥控器和我自己的private存储库。
我从 克隆了项目origin并将更改推送到private,但origin默认情况下仍然希望从 中提取。
如何在 git 中定义远程下游或上游跟踪分支?
我尝试使用递归在Clojure中创建阶乘函数
(defn fac[x] (if (= x 1) 1 (* x (fac (- x 1)))))
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试调用该函数时
(fac 5)
我得到了例外
java.lang.IllegalStateException: Attempting to call unbound fn: #'sandbox11355/fac
Run Code Online (Sandbox Code Playgroud)
这是否意味着在使用defn关键字定义函数时不可能使用递归?
另外,我如何最有效地接受这种功能语法,因为我已经习惯了命令式/ OOP思维方式?以相反的顺序键入所有内容感觉很尴尬.通过程序范式,思想的连续体直接映射到改变价值的新代码行.使用函数语法,对于操作当前值的每个步骤,我必须围绕表达式包装新函数,并且很难跟踪parens和范围.我是否应该学会以相反的顺序思考程序模型以流利地编写功能样式?
我理解没有可变状态和纯函数(更少的错误)的好处,但很难相信它失去编写过程代码的便利性.就目前而言,所有这些似乎都过度炒作无组织的混乱,但也许它开始有意义.
函数式编程不鼓励可变状态,并将数据结构限定为永久值.可以为变量分配一个新值(从纯函数派生的新数据结构),但是现有的数据结构永远不应该变异.范式已从程序状态机转变为将功能建模为连接在一起的纯函数的长链.因此减少了系统中的耦合,理论上应该更容易推理和跟踪错误.
但是我们在Web开发中试图解决的问题的业务领域自然是面向对象的.我们谈论的是实体及其属性.身份和它的状态.状态存储在数据库中.当我们进行货币交易时,我们正在改变特定的银行账户以取款/存钱.我们不考虑为每笔交易更换新的银行账户.它们本身就是可变对象.某个地方必须以某种方式改变这种状态.我意识到函数式语言并不否认状态(毕竟这是不可避免的),但有利于副作用的自由语法,这使得变异操作感觉很尴尬.
现在,函数式语言的目标是如何针对现实世界的面向对象的本质?例如,clojure没有类的概念,因此我猜它没有ORM.它如何与企业业务的关系世界保持一致?范式甚至会知道称为实体的概念吗?是否允许改变这样的实体?或者功能编程是否需要改变我们存储数据的方式?
这整个功能方法似乎是理论上的,与现实世界相矛盾.如何在Web开发的真实场景中更好地了解所有这些是如何工作的?
database entity domain-driven-design functional-programming clojure
在clojure中,我们可以使用非引用切片~@来传播列表.例如
(macroexpand `(+ ~@'(1 2 3)))
Run Code Online (Sandbox Code Playgroud)
扩展到
(clojure.core/+ 1 2 3)
Run Code Online (Sandbox Code Playgroud)
重新排列语法时,这在宏中很有用.但是,它可以使用所享有切片或熟悉技术的宏之外,没有 eval?
这是解决方案 eval
(eval `(+ ~@'(1 2 3))) ;-> 6
Run Code Online (Sandbox Code Playgroud)
但我宁愿这样做
(+ ~@'(1 2 3))
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会引发错误
IllegalStateException Attempting to call unbound fn: #'clojure.core/unquote-splicing clojure.lang.Var$Unbound.throwArity (Var.java:43)
Run Code Online (Sandbox Code Playgroud)
起初我以为apply会这样做,事实确实如此
(apply + '(1 2 3)) ; -> 6
Run Code Online (Sandbox Code Playgroud)
但是,宏或特殊形式不是这种情况.宏显而易见,因为它在应用之前已经扩展,并且无论如何必须是表单中的第一个元素.虽然特殊形式不是那么明显,但仍然有意义,因为它们不像功能一样是一等公民.例如,以下引发错误
(apply do ['(println "hello") '(println "world")]) ;-> error
Run Code Online (Sandbox Code Playgroud)
是否是在运行时"将"列表"应用"到特殊表单以使用非引号切片的唯一方法eval?
我有 moment 对象,我想将其转换为格式为dd.mm.yy. 使用 moment.js 执行此操作的最佳方法是什么?
我尝试了 toString 函数,但它以 的格式返回日期,Wed Mar 23 2016 00:00:00 GMT+0200手动转换它太费力了。
如何在调用setState后强制在React中进行状态更新?
据我所知,下次调用render时状态会有效更新.此外,forceUpdate()应该重新渲染组件并立即更新状态更改,对吧?然而,情况似乎并非如此.这是一个例子.
handleSomeEvent(data) {
this.setState({
data: data
})
this.forceUpdate()
// At this point state should be updated but it isn't
this.props.consumeData(this.state.data) // consumeData will receive old data
}
Run Code Online (Sandbox Code Playgroud)
在调用consumeData之前,如何确保状态实际更新?
如果我从函数A向函数B返回一个promise,从A返回数据,并且两个调用都捕获了Promise,那么错误如何被捕获?我知道,当承诺得到解决时,A然后总是首先被执行,然后是B,然后是从A返回的数据.但是,当Promises的这种返回形成一个长链时,我无法理解错误是如何被捕获的.以下是该场景的简化示例.我正在使用Redux-thunk动作创建器来管理状态.
function postActionCreator(data) {
return (dispatch) => {
dispatch(type: POST_LOADING)
return Source.post()
.then(response => {
dispatch(type: POST_SUCCESS, payload: response)
return response
})
.catch(error => {
// Is this catch called if handlePost throws error in then?
dispatch(type: POST_ERROR, payload: error)
throw new Error(error)
})
}
}
// Container component's post function calling the Redux action creator
function handlePost(data) {
this.props.postActionCreator(data)
.then(response => {
// Do something with response
})
.catch(error => {
// Or is the error caught with this …Run Code Online (Sandbox Code Playgroud) Robot Framework中是否有关键字以确保元素具有某个类?就像是
Element should has class element className
或者,我可以检查元素是否具有特定值的特定属性.虽然前者更合适,因为元素可能包含多个类.
在JavaScript中,可以使用...(spread)运算符将数组与另一个合并,如下所示
[...[1,2,3], ...[4,5,6]]
// -> [1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
但是,在三元?表达式中使用扩展运算符似乎没有资格
[true ? ...[1,2,3] : ...[4,5,6]]
// Uncaught SyntaxError: Unexpected token ...
Run Code Online (Sandbox Code Playgroud)
这是一种合理的语言限制,缺陷还是我遗漏了什么?没有命令式方法或Object.assign()功能,是否有可能在语法上实现这一点?
componentWillReceiveProps和其他生命周期方法似乎是欺骗性的诱惑,为无经验的React编码器手中的代码带来不必要的复杂性和噪音.它们为什么存在?他们最典型的用例是什么?在不确定的时刻,我怎么知道答案是否存在于生命周期方法中?
尽管我经常使用 Linux,但我仍然对 linux shell 运行程序的作用感到非常困惑。
据我所知,有两种类型的 shell:交互式 shell 和非交互式 shell。终端会话与交互式 shell 交互,脚本在非交互式 shell 中运行。但除了读取输入和打印输出的能力之外,真的还有其他区别吗?如果我从 shell 调用脚本,它是在此交互式 shell 中运行还是在 shell 内的新非交互式 shell 中运行?
另外,当我通过交互式 shell 或图形界面调用二进制文件来执行二进制文件时,它是否始终在 shell 中运行,或者进程是否可以在没有 shell 的情况下运行?据说所有进程都通过 shell 与内核通信,但我很困惑,因为在 docker 中,您可以将入口点定义为二进制文件或“sh -c 二进制文件”。
我想要一个像这样的查询(这不起作用!)
select * from foo where rownum < 10 having distinct bar
Run Code Online (Sandbox Code Playgroud)
含义我想从列栏中的十个随机行中选择具有不同值的所有列.如何在Oracle中执行此操作?
这是一个例子.我有以下数据
| item | rate |
-------------------
| a | 50 |
| a | 12 |
| a | 26 |
| b | 12 |
| b | 15 |
| b | 45 |
| b | 10 |
| c | 5 |
| c | 15 |
Run Code Online (Sandbox Code Playgroud)
结果将是例如
| item no | rate |
------------------
| a | 12 | …Run Code Online (Sandbox Code Playgroud)