小编She*_*yar的帖子

管道操作员行为

根据Elixir Enumerables和Streams教程:

|>符号是管道操作符:它只是从左侧的表达式获取输出,并将其作为右侧函数调用的输入传递.

Enum模块中的所有功能都非常渴望.

那么以下陈述的区别是什么?为什么最后一个会返回不同的结果?

iex(1)> 1..1_000 |> Enum.reverse |> Enum.take 5
[1000, 999, 998, 997, 996]

iex(2)> (Enum.reverse 1..1_000) |> Enum.take 5
[1000, 999, 998, 997, 996]

iex(3)> Enum.reverse 1..1_0000 |> Enum.take 5
[5, 4, 3, 2, 1]
Run Code Online (Sandbox Code Playgroud)

elixir

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

在Phoenix中使用Ecto获取数据时仅获取特定字段

我正试图在Phoenix的一个API调用中返回一些JSON数据.我正在获取所有记录Subject并发送它们但Ecto返回一些我不想要的额外字段.

我能做些什么:

  • 仅获取特定属性(仅限于idname)
  • 在我的回复中没有得到不必要的字段(例如__meta____owner__)

这是我的Controller:

# Controller
def index(conn, _) do
    subjects = Subject |> Repo.all
    conn |> render subjects: subjects
end
Run Code Online (Sandbox Code Playgroud)

这是我的View:

# View
def render("index.json", %{subjects: subjects}) do
    subjects
end
Run Code Online (Sandbox Code Playgroud)

这是我的回答:

[
    {
        "teachers": {
            "__owner__": "Elixir.MyApp.Subject",
            "__field__": "teachers",
            "__cardinality__": "many"
        },
        "updated_at": "2015-06-20T15:32:20Z",
        "topics": {
            "__owner__": "Elixir.MyApp.Subject",
            "__field__": "topics",
            "__cardinality__": "many"
        },
        "name": "Physics",
        "inserted_at": "2015-06-20T15:32:20Z",
        "id": 1,
        "__meta__": {
            "state": …
Run Code Online (Sandbox Code Playgroud)

elixir ecto phoenix-framework

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

在ExUnit测试中使用下划线(_)

我在elixir应用程序中有一个方法,比方说Some.Module.func/1,它会返回两个数字的元组.我在ExUnit中编写测试,只需要测试元组中的第一个元素,而不是真正关心第二个元素.

到目前为止,我已经尝试过这样做:

test "some method" do
    assert Some.Module.func(45) == {54, _}
end
Run Code Online (Sandbox Code Playgroud)

但是我在运行测试时遇到了这个错误:

Compiled lib/some.ex
Generated some app
** (CompileError) test/some_test.exs:7: unbound variable _
    (stdlib) lists.erl:1353: :lists.mapfoldl/3
    (stdlib) lists.erl:1354: :lists.mapfoldl/3
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用,如何在测试中忽略不需要的结果?

unit-testing elixir ex-unit

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

通过向 Java 库添加方法来扩展它

我试图了解如何在 Java 中正确“扩展”第 3 方库(包括类和接口)以及如何简单地将它们用作替代品。

我目前正在使用Twitter4J图书馆。现在我必须手动添加每次调用方法@的结果:getScreenName()User

twitter4j.User user = getTwitterUser();
String userHandle   = "@" + user.getScreenName();
Run Code Online (Sandbox Code Playgroud)

我目前已经尝试了一些东西,但没有任何效果。这是我想出的:

package my.app;

public abstract class User implements twitter4j.User {
    public String getHandle() {
        return "@" + getScreenName();
    }
}
Run Code Online (Sandbox Code Playgroud)

像这样称呼它:

User user = (User) getTwitterUser();
String userHandle = user.getHandle();
Run Code Online (Sandbox Code Playgroud)

这与消息崩溃:

java.lang.ClassCastException: twitter4j.UserJSONImpl cannot be cast to my.app.User
Run Code Online (Sandbox Code Playgroud)

java casting twitter4j

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

获取所有地图密钥

在elixir中是否有一种方法可以获得与array_keysPHP 类似的所有映射键?我一直在寻找,但似乎无法找到办法.

或者还有另一种获得独特价值的方法吗?我正在为地图中的键指定名称,其值为1仅获取不同的值.然后我想获得只检索唯一值的键.

我正在使用此代码来创建我的地图:

names = Enum.reduce lines, %{}, fn line, acc ->
  Map.put(acc, line.name, 1)
end
Run Code Online (Sandbox Code Playgroud)

例如,我有两行line.name作为测试.我希望最终结果只返回测试.或者如果它们不同,则将它们分开归还,然后使用类似的东西enum.join来组合它们

Enum.join(names, " - ")
Run Code Online (Sandbox Code Playgroud)

elixir

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

在混合文件依赖项中,“ runtime:false”是什么意思?

mix deps文档中:

:runtime-依赖项是否是运行时应用程序的一部分。如果您的mix.exs文件中:applications没有提供密钥def application,则Mix会自动将所有依赖项作为运行时应用程序包括在内,除非runtime: false给出了。默认为true。

根据mix compile.app文档:

:applications-您的应用程序在运行时依赖的所有应用程序。默认情况下,此列表是根据您的依赖项自动推断出来的。Mix和其他工具使用应用程序列表来启动依赖关系,然后再启动应用程序本身。

这是否意味着添加runtime: false依赖项将使其不能作为应用程序监视树的一部分启动,但其功能将在编译时可用?

elixir-mix elixir erlang-otp

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

Rails ActiveRecord按连接表关联的数量排序

我有一个Resource可以使用"Acts As Votable"宝石(Github页面)投票的模型.投票系统运作完美,但我试图按votes每个Resource有多少页面显示页面.

目前我的控制器根据标签提取资源,而不是订购:

@resources = Resource.where(language_id: "ruby")
Run Code Online (Sandbox Code Playgroud)

如果我获取一个单独的资源并调用"@ resource.votes.size",它将返回它有多少票.但是,投票是另一个表,所以我认为需要进行某种联接,但我不知道如何做.我需要的是一个很好的有序ActiveRecord集合,我可以这样显示?

书名 - 19票

书名 - 15票

书名 - 9票

书名 - 8票

ruby mysql sql activerecord ruby-on-rails

5
推荐指数
2
解决办法
4910
查看次数

SSE/EventSource在第一块数据(Rails 4 + Puma + Nginx)之后关闭

我按照401-ActionController-Live Railscast和这篇博客文章关于Server-Sent-Events在我的Rails应用程序中设置类似的内容.当我打开与服务器的连接时,只有使用puma但是puma + nginx,在发送第一个数据块后连接关闭时,它才能正常工作.

我也尝试过按照这些问题提供的解决方案,但它们对我不起作用:

这就是我得到的:

卷曲反应

这是我如何设置我的服务器,这是我当前的nginx配置:

upstream puma {
  server unix:///home/deploy/apps/outy/shared/tmp/sockets/outy-puma.sock;
  keepalive 16;
}

server {
  listen 80 default_server deferred;

  root /home/deploy/apps/outy/current/public;
  access_log /home/deploy/apps/outy/current/log/nginx.access.log;
  error_log /home/deploy/apps/outy/current/log/nginx.error.log info;

  location ^~ /assets/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @puma;
  location @puma {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_redirect off;

    proxy_pass http://puma;

    proxy_http_version 1.1;
    proxy_set_header Connection ""; …
Run Code Online (Sandbox Code Playgroud)

nginx server-sent-events puma ruby-on-rails-4

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

检查Elixir模块是否导出特定功能

如何检查Elixir模块是否暴露了特定的公共方法?如何检查该功能是否已被特定曝光arity

不起作用:

  • Map.methods
  • Map.functions
  • Map.has_function(:keys)

elixir

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

将映射转换为 URI 查询字符串

我有一个长生不老药Map

m1 = %{a: 1, b: "fsfd", c: 123}
Run Code Online (Sandbox Code Playgroud)

我想将其转换为 的查询字符串URI

a=1&b=fsfd&c=123
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?我试过这个:

Enum.reduce(m1, fn({k, v}, acc) -> "#{acc}&{k}=#{v}" end)
Run Code Online (Sandbox Code Playgroud)

但它不起作用,因为acc没有按预期进行模式匹配。

reduce elixir

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