Bước tới nội dung

Mô đun:Yesno/tài liệu

Bách khoa toàn thư mở Wikipedia

Mô đun này cung cấp một giao diện nhất quán để xử lý đầu vào là boolean hoặc chuỗi kiểu boolean. Trong khi Lua cho phép các giá trị boolean true (đúng) và false (sai), các bản mẫu mã wiki (wikicode) chỉ có thể thể hiện giá trị boolean thông qua các chuỗi như "yes", "no", v.v... Mô đun này xử lý các loại chuỗi đó và chuyển đổi chúng thành đầu vào boolean để Lua xử lý. Nó cũng trả về giá trị nil là nil, để cho phép phân biệt giữa nil và false. Mô đun cũng chấp nhận các cấu trúc Lua khác làm đầu vào, ví dụ: boolean, số, bảng (table) và hàm (function). Nếu nhận được đầu vào không được nhận dạng là boolean hoặc nil, ta có thể chỉ định một giá trị mặc định để trả về.

Cú pháp

yesno(value, default)

value là giá trị cần kiểm tra. Đầu vào boolean hoặc kiểu boolean (xem bên dưới) luôn được tính là true hoặc false, và nil luôn được tính là nil. Các giá trị khác được tính là default (mặc định).

Cách sử dụng

Đầu tiên, hãy tải mô đun. Lưu ý rằng nó chỉ có thể được tải từ các mô đun Lua khác, không phải từ các trang wiki thông thường. Đối với các trang wiki thông thường, bạn có thể sử dụng {{yesno}} để thay thế.

local yesno = require('Module:Yesno')

Một số giá trị đầu vào luôn trả về true, và một số luôn trả về false. Giá trị nil luôn trả về nil.

-- Những giá trị này luôn trả về true:yesno('yes')yesno('y')yesno('true')yesno('t')yesno('on')yesno('1')yesno(1)yesno(true)-- Các giá trị tiếng Việt cũng trả về true:yesno('có')yesno('c')yesno('thực')yesno('rồi')-- Những giá trị này luôn trả về false:yesno('no')yesno('n')yesno('false')yesno('f')yesno('off')yesno('0')yesno(0)yesno(false)-- Các giá trị tiếng Việt cũng trả về false:yesno('không')yesno('ko')yesno('k')yesno('sai')yesno('s')yesno('chưa')-- Giá trị nil luôn trả về nil:yesno(nil)

Các giá trị chuỗi được chuyển đổi thành chữ thường (hỗ trợ Unicode/tiếng Việt) trước khi so khớp:

-- Những giá trị này luôn trả về true:yesno('Yes')yesno('YES')yesno('yEs')yesno('Y')yesno('tRuE')-- Tiếng Việt:yesno('CÓ')yesno('Thực')-- Những giá trị này luôn trả về false:yesno('No')yesno('NO')yesno('nO')yesno('N')yesno('fALsE')-- Tiếng Việt:yesno('KHÔNG')yesno('Sai')

Đầu vào không xác định ('foo')

Bạn có thể chỉ định một giá trị mặc định nếu yesno nhận được đầu vào khác với những gì được liệt kê ở trên. Nếu bạn không cung cấp giá trị mặc định, mô đun sẽ trả về nil cho các đầu vào này.

-- Những trường hợp này trả về nil:yesno('foo')yesno({})yesno(5)yesno(function() return 'Đây là một hàm.' end)yesno(nil, true)yesno(nil, 'bar')-- Những trường hợp này trả về true:yesno('foo', true)yesno({}, true)yesno(5, true)yesno(function() return 'Đây là một hàm.' end, true)-- Những trường hợp này trả về "bar":yesno('foo', 'bar')yesno({}, 'bar')yesno(5, 'bar')yesno(function() return 'Đây là một hàm.' end, 'bar')

Lưu ý rằng chuỗi rỗng cũng hoạt động theo cách này:

yesno('')        -- Trả về nil.yesno('', true)  -- Trả về true.yesno('', 'bar') -- Trả về "bar".

Mặc dù chuỗi rỗng thường được coi là false (sai) trong wikitext, nó lại được coi là true (đúng) trong Lua. Mô đun này ưu tiên hành vi của Lua hơn hành vi của wikitext. Nếu việc coi chuỗi rỗng là false là quan trọng đối với mô đun của bạn, bạn sẽ cần chuyển đổi chuỗi rỗng thành một giá trị được coi là false trước khi chuyển chúng cho mô đun này. Trong trường hợp các đối số (arguments) nhận được từ wikitext, việc này có thể được thực hiện bằng cách sử dụng Module:Arguments.

Xử lý kết quả nil

Theo định nghĩa:

yesno(nil)         -- Trả về nil.yesno('foo')       -- Trả về nil.yesno(nil, true)   -- Trả về nil.yesno(nil, false)  -- Trả về nil.yesno('foo', true) -- Trả về true.

Để nhận được các giá trị nhị phân chỉ có true/false, hãy sử dụng mã như sau:

myvariable = yesno(value) or false -- Khi value là nil, kết quả là false.myvariable = yesno(value) or true  -- Khi value là nil, kết quả là true.myvariable = yesno('foo') or false  -- Chuỗi không xác định trả về nil, kết quả là false.myvariable = yesno('foo', true) or false  -- Giá trị mặc định (ở đây là true) được áp dụng, kết quả là true.