由于Ruby 2.3引入了安全导航操作符(&.),即孤独运算符,nil对象上的行为似乎很奇怪.
nil.nil? # => true
nil&.nil? # => nil
Run Code Online (Sandbox Code Playgroud)
这样设计的行为是这样吗?或者在添加孤独运算符时滑落的边缘情况?
在Xcode 7.1 Simulator中,当?+s用于将屏幕截图保存到桌面时,它会保存模拟器的实际大小.例如,iPhone 6 Plus 100%比例模拟器保存截图为1242 x 2208; 25%缩放模拟器将截图保存为310 x 552.
有没有办法让模拟器扩展到25%但仍能获得原始尺寸1242 x 2208?该100%模拟器只是一个13"屏幕上过于庞大.
它曾用于保存原始大小,无论比例级别如何,但在Xcode 7.1中它不再是这种情况.
()在IEx 1.2.4中键入时,光标将"跳转"到匹配的括号1s并向后移动.即使它不是真的跳跃但它有点令人讨厌.有没有办法在IEx中禁用此功能?
编辑:
虽然最初涉及IEx的问题,实际问题(正如@tkowal在下面的评论中所指出的)实际上是在IEx运行的Erlang Shell中.因此我在这个问题上添加了erlang-shell标签.
h = {
data: {
user: {
value: "John Doe"
}
}
}
Run Code Online (Sandbox Code Playgroud)
要为嵌套哈希值赋值,我们可以使用
h[:data][:user][:value] = "Bob"
Run Code Online (Sandbox Code Playgroud)
但是,如果缺少中间的任何部分,则会导致错误.
就像是
h.dig(:data, :user, :value) = "Bob"
Run Code Online (Sandbox Code Playgroud)
不起作用,因为还没有Hash#dig=.
为了安全地分配价值,我们可以做到
h.dig(:data, :user)&.[]=(:value, "Bob") # or equivalently
h.dig(:data, :user)&.store(:value, "Bob")
Run Code Online (Sandbox Code Playgroud)
但有更好的方法吗?
给定一个简单的GenServer过程.
defmodule KVServer do
use GenServer
def start do
GenServer.start(__MODULE__, %{}, name: :kv_server)
end
def store(k, v) do
GenServer.cast(:kv_server, {:store, k, v})
end
def handle_cast({:store, k, v}, state) do
{:noreply, Map.put(state, k, v)}
end
end
Run Code Online (Sandbox Code Playgroud)
我可以使用当前的进程状态 :sys.get_status/1
iex(1)> {:ok, pid} = KVServer.start
{:ok, #PID<0.119.0>}
iex(2)> KVServer.store(:a, 1)
:ok
iex(3)> KVServer.store(:b, 2)
:ok
iex(4)> {_,_,_,[_,_,_,_,[_,_,{_,[{_,state}]}]]} = :sys.get_status(pid)
...
iex(5)> state
%{a: 1, b: 2}
Run Code Online (Sandbox Code Playgroud)
只是想知道Elixir提供了一种更简单的方法来获得GenServer流程的当前状态吗?
由于以下错误,我的构建失败
[aapt] res/drawable-xhdpi/splash.png:0:错误:已定义资源条目启动.
[aapt] res/drawable-xhdpi/splash.9.png:0:最初在这里定义.
有任何想法吗?谢谢!
iex> MapSet.new(1..32) |> Enum.to_list
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32]
iex> MapSet.new(1..33) |> Enum.to_list
[11, 26, 15, 20, 17, 25, 13, 8, 7, 1, 32, 3, 6, 2, 33, 10, 9, 19, 14, 5, 18, 31,
22, 29, 21, 27, 24, 30, 23, 28, 16, 4, 12]
Run Code Online (Sandbox Code Playgroud)
这是Elixir 1.3中的实现
def new(enumerable) do
map …Run Code Online (Sandbox Code Playgroud) 在GenServer.start_link/3我可以使用原子在本地注册一个名称,用于这样的过程:
defmodule Worker do
use GenServer
def start_link do
GenServer.start_link(__MODULE__, nil, name: :worker)
end
end
Run Code Online (Sandbox Code Playgroud)
然后我可以开始一个主管来监督这个过程:
defmodule Boss do
use Supervisor
def init(_) do
children = [worker(Worker, [])]
supervise(children, strategy: :one_for_one)
end
end
Run Code Online (Sandbox Code Playgroud)
现在我想让主管监督3个Worker进程,所以我需要为这3个进程提供唯一的名称,这样当supervisor重新启动进程时,它将始终使用相同的符号名称.
我可以简单地使用字符串插值作为唯一的Worker进程名称,如下所示:
defmodule Worker do
use GenServer
def start_link(id) do
GenServer.start_link(__MODULE__, nil, name: :"worker_#{id}")
end
end
Run Code Online (Sandbox Code Playgroud)
然后监督3个这样的过程:
defmodule Boss do
use Supervisor
def init(_) do
children = for id <- 1..3 do
worker(Worker, [id], id: id)
end
supervise(children, strategy: :one_for_one)
end …Run Code Online (Sandbox Code Playgroud) 什么是通过升级到2.3的Ruby的最好办法rvm,同时保持安装在以前的版本(例如,所有的宝石json,nokogiri等)?
众所周知,Rubyist &会调用to_proc一个符号,所以
[:a, :b, :c].map(&:to_s)
Run Code Online (Sandbox Code Playgroud)
相当于
[:a, :b, :c].map { |e| e.to_s } # => ["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)
假设我想立即调用另一个方法to_s,这两个实现将起作用:
[:a, :b, :c].map { |e| e.to_s.upcase }
[:a, :b, :c].map(&:to_s).map(&:upcase)
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有办法& Symbol#to_proc在一个参数中链接调用?就像是:
[:a, :b, :c].map(&:to_s:upcase)
Run Code Online (Sandbox Code Playgroud)
谢谢!