小编sbs*_*sbs的帖子

安全导航操作员(&.)为零

由于Ruby 2.3引入了安全导航操作符(&.),即孤独运算符,nil对象上的行为似乎很奇怪.

nil.nil?    # => true
nil&.nil?   # => nil
Run Code Online (Sandbox Code Playgroud)

这样设计的行为是这样吗?或者在添加孤独运算符时滑落的边缘情况?

ruby safe-navigation-operator ruby-2.3

24
推荐指数
2
解决办法
7259
查看次数

如何在缩小时使用Xcode 7中的iOS模拟器获取屏幕截图的原始大小

在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中它不再是这种情况.

xcode simulator xcode7

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

在Erlang shell中禁用跳转游标

()在IEx 1.2.4中键入时,光标将"跳转"到匹配的括号1s并向后移动.即使它不是真的跳跃但它有点令人讨厌.有没有办法在IEx中禁用此功能?

编辑:

虽然最初涉及IEx的问题,实际问题(正如@tkowal在下面的评论中所指出的)实际上是在IEx运行的Erlang Shell中.因此我在这个问题上添加了erlang-shell标签.

elixir erlang-shell iex

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

使用Hash #dig或Lonely运算符(&.)安全地为嵌套哈希值赋值

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)

但有更好的方法吗?

ruby hash dig safe-navigation-operator ruby-2.3

17
推荐指数
2
解决办法
3229
查看次数

Elixir是否提供了更简单的方法来获取GenServer进程的当前状态?

给定一个简单的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流程的当前状态吗?

elixir gen-server

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

android build splash.9.png错误

由于以下错误,我的构建失败

[aapt] res/drawable-xhdpi/splash.png:0:错误:已定义资源条目启动.

[aapt] res/drawable-xhdpi/splash.9.png:0:最初在这里定义.

有任何想法吗?谢谢!

android splash-screen aapt

14
推荐指数
3
解决办法
5697
查看次数

为什么Elixir的MapSet在32个元素之后变得无序?

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)

set elixir

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

在GenServer.start_link/3中使用{:via,module,term}注册名称有什么好处?

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)

elixir erlang-otp gen-server erlang-supervisor

11
推荐指数
2
解决办法
1952
查看次数

通过rvm升级到Ruby 2.3同时保留所有宝石的最佳方法?

什么是通过升级到2.3的Ruby的最好办法rvm,同时保持安装在以前的版本(例如,所有的宝石json,nokogiri等)?

ruby rubygems rvm

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

符号链接和to_proc

众所周知,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)

谢谢!

ruby symbols proc

6
推荐指数
2
解决办法
805
查看次数