是否可以将结构嵌套在Clojure中的结构中?请考虑以下代码:
(defstruct rect :height :width)
(defstruct color-rect :color (struct rect))
(defn
#^{:doc "Echoes the details of the rect passed to it"}
echo-rect
[r]
(println (:color r))
(println (:height r))
(println (:width r)))
(def first-rect (struct rect 1 2))
;(def c-rect1 (struct color-rect 249 first-rect)) ;form 1
;output "249 nil nil"
(def c-rect1 (struct color-rect 249 1 2)) ;form 2
;output "Too many arguments to struct constructor
(echo-rect c-rect1)
Run Code Online (Sandbox Code Playgroud)
当然这是一个人为的例子,但有些情况下我想将大型数据结构分解为更小的子结构,以使代码更易于维护.由于注释表明如果我形成1,我得到"249 nil nil",但如果我做表格2,我得到"结构构造函数的参数太多".
如果我以错误的方式处理这个问题,请告诉我应该做什么.搜索Clojure google小组并没有为我提供任何帮助.
编辑:
我想我在问题陈述中并不像我想象的那样清楚:
1.)是否可以在Clojure中将一个结构嵌套在另一个结构中?(从下面判断,这是肯定的.)
2.)如果是这样,那么正确的语法是什么?(同样,从下面看,看起来有几种方法可以做到这一点.)
3.)当你有一个嵌套在另一个结构中的结构时,如何通过指定的键获取值?
我想我的示例代码并没有真正展示我想要做的很好.我在这里添加这个,以便其他人搜索这个可能更容易找到这个问题及其答案.
我正在研究一些F#代码,我正在研究一个函数来从一组字符串中返回一个随机字符串.假设我有这样的事情:
open System
let a = [|"a";"b";"c";"d"|]
let rstring (arr:string[]) =
let r = new Random()
arr.[r.Next(0,3)]
let resultstring = rstring a;;
Run Code Online (Sandbox Code Playgroud)
我的问题是:我对函数式编程概念的理解是,如果给定的函数每次都有相同的输入,它应该总是返回相同的输出.那么在这种特殊情况下每次返回一个不同的字符串"副作用"?我只是好奇.
如果这是一个重复的问题,请指出我原来的,我会关闭它.我不确定用什么搜索字符串来查找与此相关的任何问题.
编辑:感谢大家的所有信息.我似乎把参考透明度和缺乏副作用的概念混为一谈.所以,感谢所有人让我直截了当地感谢你的答案.
我正在尝试永远运行我的Phoenix应用程序,即独立于我的终端进程.我在Phoenix指南和Stackoverflow中看到了我可以使用的问题elixir --detached,但是我无法正确使用这些命令.事实上,我曾经能够像这样开始它,但我尝试了很多命令,我甚至不知道哪一个命令(也因为没有消息要说清楚).因此,使用最新版本的Phoenix(1.1)和Elixir(1.1.1),有哪些命令:1)永远启动服务器(作为守护进程); 2)停止服务器而无需重启服务器?
我一直在尝试找出一个正则表达式,以允许我在自动跳过注释的同时搜索特定字符串。有人有这样的 RE 或知道这样的 RE 吗?它甚至不需要足够复杂来跳过#if 0块;我只是想让它跳过//并/*阻止。相反,即仅在注释块内搜索,也将非常有用。
环境:VS 2003
如何为一个可以与自身建立一对多关系的实体构建一个表?具体来说,我正在开发一个跟踪动物繁殖的应用程序.每只动物都有一个ID; 它还有一个父亲ID和一个女性ID.因此,从父系或贵妇到后代可以有一对多.我会倾向于这样的事情:
ID INT NOT NULL PRIMARY KEY
SIRE_ID INT
DAME_ID INT
Run Code Online (Sandbox Code Playgroud)
并且为购买并添加到种畜中的那些动物记录空值,并在表格中记录其余的动物ID.
所以:
这可能最好通过两个表格建模吗?我指的是动物的一张桌子和一张单独表格,表示亲属关系,例如:
动物
ID INT NOT NOT PRIMARY KEY
亲属
ID INT NOT NOT PRIMARY KEY FOREIGN KEY
SIRE_ID INT PRIMARY KEY FOREIGN KEY
DAME_ID INT PRIMARY KEY FOREIGN KEY
我为上述事件道歉:我的SQL生锈了.我希望它能传达我正在思考的东西.
我事先道歉;这是一个很长的问题。我已经尽力简化了,但是仍然比我所想看到的要冗长得多。
在一些旧代码中,我们有一个VB6集合。此集合通过.Add方法添加对象,并通过.Remove方法删除对象。但是,通过跟踪我可以看到,有时在调用.Remove时,似乎没有调用该对象的类终止。但这并不一致。它很少发生,我无法隔离它无法触发类终止的情况。
考虑以下演示代码:
Option Explicit
Private Const maxServants As Integer = 15
Private Const className As String = "Master"
Private Sub Class_Initialize()
Debug.Print className & " class constructor "
Set g_coll1 = New Collection
Dim i As Integer
For i = 1 To maxServants
Dim m_servant As Servant
Set m_servant = New Servant
m_servant.InstanceNo = i
g_coll1.Add Item:=m_servant, Key:=CStr(i)
Debug.Print "Adding servant " & m_servant.InstanceNo
Next
End Sub
Private Sub Class_Terminate()
Dim i As Integer
For i = maxServants To …Run Code Online (Sandbox Code Playgroud) 简单的问题:是否可以在单声道上托管websharper应用程序.如果没有,有没有计划支持这样的功能?
FSI版本:11.0.50727.1
所以我正在研究一个F#shell脚本,我遇到了一些让我感到惊讶的事情.
当我这样做时:
#if INTERACTIVE
#r "System.Data.dll"
#r "FSharp.Data.TypeProviders.dll"
#r "System.Data.Linq.dll"
#endif
open System
Run Code Online (Sandbox Code Playgroud)
当我将块粘贴到FSI中时出现FS0010错误.但如果我没有缩进行#r,没有FS0010错误.我只是惊讶于预处理器行会对缩进敏感.这是一个编译器问题还是还有其他工作在这里?
我有两个函数,它们是纯函数的组合.第一个功能需要一个包裹,在其上建一个房子,然后拍照以在杂志上刊登广告:
let buildAndAdvertiseHouse parcel =
parcel
|> inspect
|> buildWalls
|> buildRoof
|> takePhoto
|> advertise
Run Code Online (Sandbox Code Playgroud)
第二个功能还包括一个包裹,在它上面建一个房子,并为它添加一个画龙点睛:
let buildAndCompleteHouse parcel =
parcel
|> inspect
|> buildWalls
|> buildRoof
|> paintWalls
|> addFurniture
Run Code Online (Sandbox Code Playgroud)
很明显,这两个函数也是纯粹的,因为它们是纯函数的组合.现在我有一个包裹,让我们说niceParcel,我想将两个功能应用于它.但是,我想避免前三个子函数计算两次,因为它们需要花费大量时间进行计算,并且它们在两个函数之间共享.
我如何重构我的代码,以避免这些不必要的计算,同时保留这些具有明确含义的纯函数?
我意识到Anko(和Kotlin)都是相当先进的,但我希望有人能够给我一点指导.当然,这对我来说只是一个学习项目.
我从代码中略微修改了以下Kotlin代码(使用Anko):
verticalLayout {
padding = dip(30)
val name = editText {
hint = "Name"
textSize = 24f
}
val password = editText {
hint = "Password"
textSize = 24f
inputType = android.text.InputType.TYPE_TEXT_VARIATION_PASSWORD
}
button("Login") {
textSize = 26f
onClick {
toast("Good afternoon, ${name.text}!")
}
}
}
Run Code Online (Sandbox Code Playgroud)
所有东西都在构建和显示但我似乎无法获得密码editText来掩盖输入,因为我正在输入它.我错过了什么?
f# ×4
.net ×2
anko ×1
c++ ×1
class ×1
clojure ×1
collections ×1
destructor ×1
elixir ×1
kotlin ×1
nested ×1
regex ×1
struct ×1
utilities ×1
vb6 ×1
visual-c++ ×1
websharper ×1