我正在学习clojure(来自ruby)并且在围绕生成集合的最佳方式时遇到一些麻烦.
我想写一个带有两个参数的函数 - 向量ary和整数sum- 并生成一个新的2D向量,其中每行的总和<=输入和(忽略输入验证).我遇到麻烦的概念点是如何在建立新集合的同时保持"当前行总和"的状态.
这是我得到的:
(defn split-after-sum [ary sum]
(reduce (fn [acc i]
(let [inner-sum (+ (last acc) i)]
(if (< inner-sum sum)
[(conj (first acc) i) (+ i (last acc))]
[(conj (first acc) i "X") 0])))
[[] 0] ary))
Run Code Online (Sandbox Code Playgroud)
我正在传递reduce一个2元素向量,以便跟踪我正在构建的集合和此行的总计数.
它有点工作.我还没弄明白如何将结果实际制作为2D数组,所以它只是粘贴"X",其中的分割应该是:
(first (split-after-sum [1 1 1 1 1 1 1 1 1] 2)) => [1 1 "X" 1 1 "X" 1 1 "X" 1 1 "X" 1]
Run Code Online (Sandbox Code Playgroud)
理想的输出是:
(split-after-sum [1 1 1 …Run Code Online (Sandbox Code Playgroud) 如果您尝试解构的键不在传递给您的函数的映射中,是否有一种方法可以引发异常?这对宏来说是一个很好的用例吗?
例如:
(defn x [{:keys [a b]}] (println a b))
我想要这个工作:
(x {:a 1 :b 2})
但这会引发异常(:b缺失)
(x {:a 1})
我希望用户能够输入网址,然后在我的视图中添加指向该网址的链接.
有效的输入可能是前https://www.google.com/path,http://www.google.com,www.google.com
是否有标准的rails方式1)验证输入是有效的url格式和2)将第三种格式转换为http://www.google.com我的视图,以便外部链接工作?
如果我能避免它,我不想重新发明轮子.
我将如何编写一个交互式函数,该函数接受一个函数并用在该区域上调用该函数的结果替换当前选定的区域。
我看到这个答案:https : //stackoverflow.com/a/6539916/625365
但是那是每行调用一次函数,而不是将区域作为参数提供给它,而且看起来代码很多。
我正在尝试授予我的服务帐户foo权限以获取集群上的节点列表(通过kubectl get nodes)。我创建了一个 clusterrole 和一个具有以下权限的角色绑定:
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
name: foo-cluster-role
rules:
- apiGroups: [""]
resources: ["nodes"]
verbs: ["get", "list", "watch"]
Run Code Online (Sandbox Code Playgroud)
当我使用该服务帐户运行 pod 时,我无法运行kubectl get nodes:
root@debugger:/# kubectl get nodes
Error from server (Forbidden): nodes is forbidden: User "system:serviceaccount:default:foo" cannot list resource "nodes" in API group "" at the cluster scope
Run Code Online (Sandbox Code Playgroud)
奇怪的是,当我询问 via 时kubectl auth can-i,它告诉我我应该有权访问:
root@debugger:/# kubectl auth can-i get nodes
Warning: resource 'nodes' is not namespace scoped
yes
Run Code Online (Sandbox Code Playgroud)
如何设置我的服务帐户以便有权列出集群上的节点? …
您可以调用include来将模块与ruby中的类混合,但必须在类定义的开头进行.为什么不能在类函数内完成?有替代语法吗?
EX:
module UsefulThings
def a() puts "a" end
end
class IncludeTester
include UsefulThings
def initialize
end
end
n = IncludeTester.new
n.a()
Run Code Online (Sandbox Code Playgroud)
^^这有效,但如果我将IncludeTester更改为以下内容,则会收到错误"undefined method`include'"
class IncludeTester
def initialize
include UsefulThings
end
end
Run Code Online (Sandbox Code Playgroud) 假设我在schema.rb中有这个:
create_table "products" do |t|
t.string "name",
t.text "description"
end
Run Code Online (Sandbox Code Playgroud)
我想要一种方法来找出产品属性的数据库类型是什么.
就像是: Product.column_type(:name) => "string"
这可能吗?
我有一个〜10,000个字符串和整数的数组,我想序列化到Rails网页.最终的目标是将数组放入JavaScript数组中,但我很高兴将它作为文本blob,然后我解析客户端.
我无法缓存字符串,值会更改每个请求.
我的VPS需要大约25ms:
arr = ["ABCD", 1] * 10000 # always in string, number, string, number order
start = Time.now
arr.to_s
duration = (Time.now - start)*1000
puts "took #{duration}ms"
Run Code Online (Sandbox Code Playgroud)
我们可以做得更好吗?
编辑
@ sawa的答案是正确的,to_json是快速的,这是一个很好的方法.我被抛弃了,因为to_json在Rails环境中被覆盖了.请JSON.generate(arr)改用.