小编spi*_*ike的帖子

通过状态减少clojure集合

我正在学习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)

clojure

4
推荐指数
1
解决办法
411
查看次数

解构时需要的密钥

如果您尝试解构的键不在传递给您的函数的映射中,是否有一种方法可以引发异常?这对宏来说是一个很好的用例吗?

例如:

(defn x [{:keys [a b]}] (println a b))

我想要这个工作:

(x {:a 1 :b 2})

但这会引发异常(:b缺失)

(x {:a 1})

clojure

4
推荐指数
1
解决办法
177
查看次数

将用户输入的URL放入rails中的外部链接

我希望用户能够输入网址,然后在我的视图中添加指向该网址的链接.

有效的输入可能是前https://www.google.com/path,http://www.google.com,www.google.com

是否有标准的rails方式1)验证输入是有效的url格式和2)将第三种格式转换为http://www.google.com我的视图,以便外部链接工作?

如果我能避免它,我不想重新发明轮子.

ruby ruby-on-rails-3

3
推荐指数
1
解决办法
1580
查看次数

用区域上调用函数的结果替换区域

我将如何编写一个交互式函数,该函数接受一个函数并用在该区域上调用该函数的结果替换当前选定的区域。

我看到这个答案:https : //stackoverflow.com/a/6539916/625365

但是那是每行调用一次函数,而不是将区域作为参数提供给它,而且看起来代码很多。

emacs elisp

3
推荐指数
2
解决办法
538
查看次数

Kubernetes ServiceAccount 无法列出节点

我正在尝试授予我的服务帐户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)

如何设置我的服务帐户以便有权列出集群上的节点? …

kubernetes

3
推荐指数
1
解决办法
4975
查看次数

为什么我不能在ruby中调用类方法中的include?

您可以调用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)

ruby

1
推荐指数
1
解决办法
3650
查看次数

获取ActiveRecord对象属性的数据库类型

假设我在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"

这可能吗?

ruby-on-rails ruby-on-rails-3

1
推荐指数
1
解决办法
1220
查看次数

在ruby中快速将数组转换为字符串

我有一个〜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)改用.

ruby

0
推荐指数
1
解决办法
132
查看次数