Elixir Exception
TIL
489
elixir
25
White

kiennt viết ngày 04/07/2016

Cách tạo mới Exception trong Elixir

Khi muốn tạo mới một loại Exception, cần define hàm exception/1. Hàm này sẽ được gọi khi exception được raise

Cụ thể, với exception Ecto.NoPrimaryKeyFieldError được định nghĩa như sau

defmodule Ecto.NoPrimaryKeyFieldError do
  @moduledoc """
  Raised at runtime when an operation that requires a primary key is invoked
  with a schema that does not define a primary key by using `@primary_key false`
  """
  defexception [:message, :schema]

  def exception(opts) do
    schema  = Keyword.fetch!(opts, :schema)
    message = "schema `#{inspect schema}` has no primary key"
    %__MODULE__{message: message, schema: schema}
  end
end

Khi exception này được raise, hàm exception/1 sẽ được gọi

  def primary_key!(%{__struct__: schema} = struct) do
    case primary_key(struct) do
      [] -> raise Ecto.NoPrimaryKeyFieldError, schema: schema
      pk -> pk
    end
  end

Nếu như trong Exception module, không định nghĩa hàm exception/1, thì khi raise exception, cần truyền vào đầy đủ các tham số của exception

defmodule SimpleException do
   defexception [:message, :foo]
end

raise SimpleException, message: "hello exception", foo: "foo value"

kiennt 05-07-2016

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

kiennt

29 bài viết.
228 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
81 18
Mọi chuyện bắt đầu từ nắm 2013 trong quá trình xây dựng chức năng login với Facebook, tôi đã tìm ra một cách để tấn công vào các hệ thống login với...
kiennt viết gần 2 năm trước
81 18
White
26 5
1. Đặt vấn đề Một trong các vấn đề của một hệ thống backend là bài toán điều phối request tới các nguồn dữ liệu. Xét bài toán với một hệ thống bl...
kiennt viết hơn 1 năm trước
26 5
White
22 4
Mở đầu Tôi đang học về (Link) (Link) (hệ thống phân tán). Đây là một lĩnh vực rất hay và khó (đối với tôi). Phần lớn các hệ thống máy tính hiện na...
kiennt viết hơn 1 năm trước
22 4
Bài viết liên quan
White
18 1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...
kiennt viết hơn 1 năm trước
18 1
White
1 1
Chào mọi người, hôm nay mình viết một bài TIL nhỏ về cách lấy độ phân giải của màn hình hiện tại đang sử dụng. xdpyinfo | grep dimensions Kết quả...
namtx viết 7 tháng trước
1 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
29 bài viết.
228 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!